--- /dev/null
+From 12d58cf3e30dee91ed7aadb6475a15c6e74cc88b Mon Sep 17 00:00:00 2001
+From: Michael Pratt <mcpratt@pm.me>
+Date: Wed, 16 Oct 2024 19:53:52 +0000
+Subject: [PATCH] Remove usage of "unlocked" variant of stdio print functions
+
+These "unlocked" Linux Standard Base variants of standard functions
+are not available on some systems that are still capable
+of building Linux and ELFs.
+
+The difference is negligible for simple printing to stdout.
+
+POSIX also states for the similar putc_unlocked():
+
+ These functions can safely be used in a multi-threaded program
+ if and only if they are called while the invoking thread owns
+ the (FILE *) object, as is the case after a successful call
+ to the flockfile() or ftrylockfile() functions.
+
+...
+
+ These unlocked versions can be safely used
+ only within explicitly locked program regions,
+ using exported locking primitives.
+
+and these precautions were never done.
+
+Use the standard forms of these print functions.
+
+There is inconsistent use of fputc_unlocked() with putc_unlocked(),
+so consistently use the safer fputc() instead.
+
+Signed-off-by: Michael Pratt <mcpratt@pm.me>
+---
+ libasm/asm_align.c | 4 +-
+ libcpu/i386_parse.y | 4 +-
+ libebl/eblobjnote.c | 4 +-
+ src/nm.c | 20 +++++-----
+ src/objdump.c | 24 ++++++------
+ src/readelf.c | 90 ++++++++++++++++++++++-----------------------
+ src/size.c | 8 ++--
+ src/strings.c | 20 +++++-----
+ tests/showptable.c | 8 ++--
+ 9 files changed, 91 insertions(+), 91 deletions(-)
+
+--- a/libasm/asm_align.c
++++ b/libasm/asm_align.c
+@@ -60,13 +60,13 @@ asm_align (AsmScn_t *asmscn, GElf_Word v
+ fprintf (asmscn->ctx->out.file, "%02hhx\n", asmscn->pattern->bytes[0]);
+ else
+ {
+- fputc_unlocked ('"', asmscn->ctx->out.file);
++ fputc ('"', asmscn->ctx->out.file);
+
+ for (size_t cnt = 0; cnt < asmscn->pattern->len; ++cnt)
+ fprintf (asmscn->ctx->out.file, "\\x%02hhx",
+ asmscn->pattern->bytes[cnt]);
+
+- fputs_unlocked ("\"\n", asmscn->ctx->out.file);
++ fputs ("\"\n", asmscn->ctx->out.file);
+ }
+ return 0;
+ }
+--- a/libcpu/i386_parse.y
++++ b/libcpu/i386_parse.y
+@@ -1158,7 +1158,7 @@ instrtable_out (void)
+ EMIT_SUFFIX (w1);
+ EMIT_SUFFIX (W1);
+
+- fputc_unlocked ('\n', outfile);
++ fputc ('\n', outfile);
+
+ for (int i = 0; i < 3; ++i)
+ {
+@@ -1333,7 +1333,7 @@ instrtable_out (void)
+ b = b->next;
+ }
+
+- fputc_unlocked ('\n', outfile);
++ fputc ('\n', outfile);
+ }
+ fputs ("};\n", outfile);
+ }
+--- a/libebl/eblobjnote.c
++++ b/libebl/eblobjnote.c
+@@ -643,10 +643,10 @@ ebl_object_note (Ebl *ebl, uint32_t name
+ for (size_t cnt = 1; cnt < descsz / 4; ++cnt)
+ {
+ if (cnt > 1)
+- putchar_unlocked ('.');
++ putchar ('.');
+ printf ("%" PRIu32, buf[cnt]);
+ }
+- putchar_unlocked ('\n');
++ putchar ('\n');
+ }
+ if (descsz / 4 > FIXED_TAG_BYTES)
+ free (buf);
+--- a/src/nm.c
++++ b/src/nm.c
+@@ -439,7 +439,7 @@ handle_ar (int fd, Elf *elf, const char
+ Elf_Arhdr *arhdr = NULL;
+ size_t arhdr_off = 0; /* Note: 0 is no valid offset. */
+
+- fputs_unlocked (_("\nArchive index:\n"), stdout);
++ fputs (_("\nArchive index:\n"), stdout);
+
+ while (arsym->as_off != 0)
+ {
+@@ -825,8 +825,8 @@ show_symbols_sysv (Ebl *ebl, GElf_Word s
+ /* If we have to precede the line with the file name. */
+ if (print_file_name)
+ {
+- fputs_unlocked (fullname, stdout);
+- putchar_unlocked (':');
++ fputs (fullname, stdout);
++ putchar (':');
+ }
+
+ /* Convert the address. */
+@@ -972,8 +972,8 @@ show_symbols_bsd (Elf *elf, const GElf_E
+ /* If we have to precede the line with the file name. */
+ if (print_file_name)
+ {
+- fputs_unlocked (fullname, stdout);
+- putchar_unlocked (':');
++ fputs (fullname, stdout);
++ putchar (':');
+ }
+
+ bool is_tls = GELF_ST_TYPE (syms[cnt].sym.st_info) == STT_TLS;
+@@ -1046,8 +1046,8 @@ show_symbols_bsd (Elf *elf, const GElf_E
+ }
+
+ if (color_mode)
+- fputs_unlocked (color_off, stdout);
+- putchar_unlocked ('\n');
++ fputs (color_off, stdout);
++ putchar ('\n');
+ }
+
+ #ifdef USE_DEMANGLE
+@@ -1104,9 +1104,9 @@ show_symbols_posix (Elf *elf, const GElf
+ /* If we have to precede the line with the file name. */
+ if (print_file_name)
+ {
+- fputs_unlocked (fullname, stdout);
+- putchar_unlocked (':');
+- putchar_unlocked (' ');
++ fputs (fullname, stdout);
++ putchar (':');
++ putchar (' ');
+ }
+
+ printf ("%s %c%s", symstr,
+--- a/src/objdump.c
++++ b/src/objdump.c
+@@ -580,12 +580,12 @@ show_full_content (Ebl *ebl, const char
+ printf ("%02hhx%02hhx%02hhx%02hhx ",
+ cp[inner], cp[inner + 1], cp[inner + 2],
+ cp[inner + 3]);
+- fputc_unlocked (' ', stdout);
++ fputc (' ', stdout);
+
+ for (size_t inner = 0; inner < 16; ++inner)
+- fputc_unlocked (isascii (cp[inner]) && isprint (cp[inner])
++ fputc (isascii (cp[inner]) && isprint (cp[inner])
+ ? cp[inner] : '.', stdout);
+- fputc_unlocked ('\n', stdout);
++ fputc ('\n', stdout);
+ }
+
+ printf (" %04zx ", cnt);
+@@ -601,14 +601,14 @@ show_full_content (Ebl *ebl, const char
+
+ for (inner = 2 * (16 - inner) + (16 - inner + 3) / 4 + 1; inner > 0;
+ --inner)
+- fputc_unlocked (' ', stdout);
++ fputc (' ', stdout);
+
+ for (inner = 0; inner < remaining; ++inner)
+- fputc_unlocked (isascii (cp[inner]) && isprint (cp[inner])
++ fputc (isascii (cp[inner]) && isprint (cp[inner])
+ ? cp[inner] : '.', stdout);
+- fputc_unlocked ('\n', stdout);
++ fputc ('\n', stdout);
+
+- fputc_unlocked ('\n', stdout);
++ fputc ('\n', stdout);
+ }
+ }
+
+@@ -640,12 +640,12 @@ disasm_output (char *buf, size_t buflen,
+ printf ("%8" PRIx64 ": ", (uint64_t) info->addr);
+
+ if (info->bytes_color != NULL)
+- fputs_unlocked (info->bytes_color, stdout);
++ fputs (info->bytes_color, stdout);
+ size_t cnt;
+ for (cnt = 0; cnt < (size_t) MIN (info->cur - info->last_end, 8); ++cnt)
+ printf (" %02" PRIx8, info->last_end[cnt]);
+ if (info->bytes_color != NULL)
+- fputs_unlocked (color_off, stdout);
++ fputs (color_off, stdout);
+
+ printf ("%*s %.*s\n",
+ (int) (8 - cnt) * 3 + 1, "", (int) buflen, buf);
+@@ -663,12 +663,12 @@ disasm_output (char *buf, size_t buflen,
+ printf ("%8" PRIx64 ": ", (uint64_t) info->addr);
+
+ if (info->bytes_color != NULL)
+- fputs_unlocked (info->bytes_color, stdout);
++ fputs (info->bytes_color, stdout);
+ for (; cnt < (size_t) (info->cur - info->last_end); ++cnt)
+ printf (" %02" PRIx8, info->last_end[cnt]);
+ if (info->bytes_color != NULL)
+- fputs_unlocked (color_off, stdout);
+- putchar_unlocked ('\n');
++ fputs (color_off, stdout);
++ putchar ('\n');
+ info->addr += info->cur - info->last_end - 8;
+ }
+
+--- a/src/readelf.c
++++ b/src/readelf.c
+@@ -1127,7 +1127,7 @@ print_file_type (unsigned short int e_ty
+ static void
+ print_ehdr (Ebl *ebl, GElf_Ehdr *ehdr)
+ {
+- fputs_unlocked (_("ELF Header:\n Magic: "), stdout);
++ fputs (_("ELF Header:\n Magic: "), stdout);
+ for (size_t cnt = 0; cnt < EI_NIDENT; ++cnt)
+ printf (" %02hhx", ehdr->e_ident[cnt]);
+
+@@ -1154,7 +1154,7 @@ print_ehdr (Ebl *ebl, GElf_Ehdr *ehdr)
+ printf (_(" ABI Version: %hhd\n"),
+ ehdr->e_ident[EI_ABIVERSION]);
+
+- fputs_unlocked (_(" Type: "), stdout);
++ fputs (_(" Type: "), stdout);
+ print_file_type (ehdr->e_type);
+
+ const char *machine = dwelf_elf_e_machine_string (ehdr->e_machine);
+@@ -1196,9 +1196,9 @@ print_ehdr (Ebl *ebl, GElf_Ehdr *ehdr)
+ printf (_(" (%" PRIu32 " in [0].sh_info)"),
+ (uint32_t) shdr->sh_info);
+ else
+- fputs_unlocked (_(" ([0] not available)"), stdout);
++ fputs (_(" ([0] not available)"), stdout);
+ }
+- fputc_unlocked ('\n', stdout);
++ fputc ('\n', stdout);
+
+ printf (_(" Size of section header entries: %" PRId16 " %s\n"),
+ ehdr->e_shentsize, _("(bytes)"));
+@@ -1213,9 +1213,9 @@ print_ehdr (Ebl *ebl, GElf_Ehdr *ehdr)
+ printf (_(" (%" PRIu32 " in [0].sh_size)"),
+ (uint32_t) shdr->sh_size);
+ else
+- fputs_unlocked (_(" ([0] not available)"), stdout);
++ fputs (_(" ([0] not available)"), stdout);
+ }
+- fputc_unlocked ('\n', stdout);
++ fputc ('\n', stdout);
+
+ if (unlikely (ehdr->e_shstrndx == SHN_XINDEX))
+ {
+@@ -1406,7 +1406,7 @@ There are %zd section headers, starting
+ }
+ }
+
+- fputc_unlocked ('\n', stdout);
++ fputc ('\n', stdout);
+ }
+
+
+@@ -1552,22 +1552,22 @@ print_phdr (Ebl *ebl, GElf_Ehdr *ehdr)
+ && shdr->sh_addr >= relro_from
+ && shdr->sh_addr + shdr->sh_size <= relro_to)
+ {
+- fputs_unlocked (" [RELRO:", stdout);
++ fputs (" [RELRO:", stdout);
+ in_relro = true;
+ }
+ else if (has_relro && in_relro && shdr->sh_addr >= relro_to)
+ {
+- fputs_unlocked ("]", stdout);
++ fputs ("]", stdout);
+ in_relro = false;
+ }
+ else if (has_relro && in_relro
+ && shdr->sh_addr + shdr->sh_size > relro_to)
+- fputs_unlocked ("] <RELRO:", stdout);
++ fputs ("] <RELRO:", stdout);
+ else if (phdr->p_type == PT_LOAD && (phdr->p_flags & PF_W) == 0)
+ {
+ if (!in_ro)
+ {
+- fputs_unlocked (" [RO:", stdout);
++ fputs (" [RO:", stdout);
+ in_ro = true;
+ }
+ }
+@@ -1592,12 +1592,12 @@ print_phdr (Ebl *ebl, GElf_Ehdr *ehdr)
+ {
+ if ((phdr2->p_flags & PF_W) == 0 && !in_ro)
+ {
+- fputs_unlocked (" [RO:", stdout);
++ fputs (" [RO:", stdout);
+ in_ro = true;
+ }
+ else if ((phdr2->p_flags & PF_W) != 0 && in_ro)
+ {
+- fputs_unlocked ("]", stdout);
++ fputs ("]", stdout);
+ in_ro = false;
+ }
+ }
+@@ -1610,16 +1610,16 @@ print_phdr (Ebl *ebl, GElf_Ehdr *ehdr)
+ if (has_relro && in_relro
+ && shdr->sh_addr + shdr->sh_size > relro_to)
+ {
+- fputs_unlocked (">", stdout);
++ fputs (">", stdout);
+ in_relro = false;
+ }
+ }
+ }
+ if (in_relro || in_ro)
+- fputs_unlocked ("]", stdout);
++ fputs ("]", stdout);
+
+ /* Finish the line. */
+- fputc_unlocked ('\n', stdout);
++ fputc ('\n', stdout);
+ }
+ }
+
+@@ -1788,8 +1788,8 @@ print_flags (int class, GElf_Xword d_val
+ if (d_val & flags[cnt].mask)
+ {
+ if (!first)
+- putchar_unlocked (' ');
+- fputs_unlocked (flags[cnt].str, stdout);
++ putchar (' ');
++ fputs (flags[cnt].str, stdout);
+ d_val &= ~flags[cnt].mask;
+ first = false;
+ }
+@@ -1797,11 +1797,11 @@ print_flags (int class, GElf_Xword d_val
+ if (d_val != 0)
+ {
+ if (!first)
+- putchar_unlocked (' ');
++ putchar (' ');
+ printf ("%#0*" PRIx64, class == ELFCLASS32 ? 10 : 18, d_val);
+ }
+
+- putchar_unlocked ('\n');
++ putchar ('\n');
+ }
+
+
+@@ -1909,7 +1909,7 @@ handle_dynamic (Ebl *ebl, Elf_Scn *scn,
+ phdr->p_offset);
+ }
+
+- fputs_unlocked (_(" Type Value\n"), stdout);
++ fputs (_(" Type Value\n"), stdout);
+
+ /* if --use-dynamic option is enabled,
+ use the string table to get the related library info. */
+@@ -1953,7 +1953,7 @@ handle_dynamic (Ebl *ebl, Elf_Scn *scn,
+ case DT_BIND_NOW:
+ case DT_TEXTREL:
+ /* No further output. */
+- fputc_unlocked ('\n', stdout);
++ fputc ('\n', stdout);
+ break;
+
+ case DT_NEEDED:
+@@ -2147,7 +2147,7 @@ handle_relocs_rel (Ebl *ebl, GElf_Ehdr *
+ elf_strptr (ebl->elf, shstrndx, shdr->sh_name),
+ shdr->sh_offset,
+ nentries);
+- fputs_unlocked (class == ELFCLASS32
++ fputs (class == ELFCLASS32
+ ? _("\
+ Offset Type Value Name\n")
+ : _("\
+@@ -2384,7 +2384,7 @@ handle_relocs_rela (Ebl *ebl, GElf_Ehdr
+ elf_strptr (ebl->elf, shstrndx, shdr->sh_name),
+ shdr->sh_offset,
+ nentries);
+- fputs_unlocked (class == ELFCLASS32
++ fputs (class == ELFCLASS32
+ ? _("\
+ Offset Type Value Addend Name\n")
+ : _("\
+@@ -2891,7 +2891,7 @@ process_symtab (Ebl *ebl, unsigned int n
+ }
+ }
+
+- putchar_unlocked ('\n');
++ putchar ('\n');
+ }
+ }
+
+@@ -2973,7 +2973,7 @@ handle_symtab (Ebl *ebl, Elf_Scn *scn, G
+ (unsigned int) shdr->sh_link,
+ elf_strptr (ebl->elf, shstrndx, glink->sh_name));
+
+- fputs_unlocked (class == ELFCLASS32
++ fputs (class == ELFCLASS32
+ ? _("\
+ Num: Value Size Type Bind Vis Ndx Name\n")
+ : _("\
+@@ -3649,12 +3649,12 @@ handle_versym (Ebl *ebl, Elf_Scn *scn, G
+ {
+ ssize_t n;
+ case 0:
+- fputs_unlocked (_(" 0 *local* "),
++ fputs (_(" 0 *local* "),
+ stdout);
+ break;
+
+ case 1:
+- fputs_unlocked (_(" 1 *global* "),
++ fputs (_(" 1 *global* "),
+ stdout);
+ break;
+
+@@ -3671,7 +3671,7 @@ handle_versym (Ebl *ebl, Elf_Scn *scn, G
+ break;
+ }
+ }
+- putchar_unlocked ('\n');
++ putchar ('\n');
+ }
+
+
+@@ -3718,7 +3718,7 @@ print_hash_info (Ebl *ebl, Elf_Scn *scn,
+ uint64_t success = 0;
+
+ /* xgettext:no-c-format */
+- fputs_unlocked (_("\
++ fputs (_("\
+ Length Number % of total Coverage\n"), stdout);
+ printf (_(" 0 %6" PRIu32 " %5.1f%%\n"),
+ counts[0], (counts[0] * 100.0) / nbucket);
+@@ -4140,7 +4140,7 @@ print_attributes (Ebl *ebl, const GElf_E
+ if (unlikely (*p++ != 'A'))
+ return;
+
+- fputs_unlocked (_(" Owner Size\n"), stdout);
++ fputs (_(" Owner Size\n"), stdout);
+
+ /* Loop over the sections. */
+ while (left (data, p) >= 4)
+@@ -7233,7 +7233,7 @@ print_encoding_base (const char *pfx, un
+ if (w & 0x70)
+ {
+ if (w != fde_encoding)
+- fputc_unlocked (' ', stdout);
++ fputc (' ', stdout);
+
+ w = print_relinfo (w);
+ }
+@@ -9772,7 +9772,7 @@ print_debug_line_section (Dwfl_Module *d
+ {
+ get_uleb128 (u128, linep, lineendp);
+ if (n != standard_opcode_lengths[opcode])
+- putc_unlocked (',', stdout);
++ fputc (',', stdout);
+ printf (" %u", u128);
+ }
+
+@@ -10525,7 +10525,7 @@ print_debug_macinfo_section (Dwfl_Module
+ \nDWARF section [%2zu] '%s' at offset %#" PRIx64 ":\n"),
+ elf_ndxscn (scn), section_name (ebl, shdr),
+ (uint64_t) shdr->sh_offset);
+- putc_unlocked ('\n', stdout);
++ fputc ('\n', stdout);
+
+ /* There is no function in libdw to iterate over the raw content of
+ the section but it is easy enough to do. */
+@@ -10687,7 +10687,7 @@ print_debug_macro_section (Dwfl_Module *
+ \nDWARF section [%2zu] '%s' at offset %#" PRIx64 ":\n"),
+ elf_ndxscn (scn), section_name (ebl, shdr),
+ (uint64_t) shdr->sh_offset);
+- putc_unlocked ('\n', stdout);
++ fputc ('\n', stdout);
+
+ /* Get the source file information for all CUs. Uses same
+ datastructure as macinfo. But uses offset field to directly
+@@ -10840,15 +10840,15 @@ print_debug_macro_section (Dwfl_Module *
+ goto invalid_data;
+ args--;
+ if (args > 0)
+- putchar_unlocked (',');
++ putchar (',');
+ }
+ }
+ else
+ printf (_(" no arguments."));
+- putchar_unlocked ('\n');
++ putchar ('\n');
+ }
+ }
+- putchar_unlocked ('\n');
++ putchar ('\n');
+
+ int level = 1;
+ if (readp + 1 > readendp)
+@@ -11025,14 +11025,14 @@ print_debug_macro_section (Dwfl_Module *
+ if (args > 0)
+ printf (", ");
+ }
+- putchar_unlocked ('\n');
++ putchar ('\n');
+ }
+
+ if (readp + 1 > readendp)
+ goto invalid_data;
+ opcode = *readp++;
+ if (opcode == 0)
+- putchar_unlocked ('\n');
++ putchar ('\n');
+ }
+ }
+ }
+@@ -11368,7 +11368,7 @@ print_debug_frame_hdr_section (Dwfl_Modu
+ /* +4 because of the 4 byte header of the section. */
+ (uint64_t) shdr->sh_offset + 4 + eh_frame_ptr);
+
+- putchar_unlocked ('\n');
++ putchar ('\n');
+ }
+
+ uint64_t fde_count = 0;
+@@ -11546,7 +11546,7 @@ print_debug_exception_table (Dwfl_Module
+ else if (ar_disp != 0)
+ puts (" -> ???");
+ else
+- putchar_unlocked ('\n');
++ putchar ('\n');
+ ++u;
+ }
+ while (readp < action_table_end);
+@@ -13200,19 +13200,19 @@ handle_core_note (Ebl *ebl, const GElf_N
+ nregloc == 0 ? nhdr->n_descsz : 0,
+ items, nitems);
+ if (colno != 0)
+- putchar_unlocked ('\n');
++ putchar ('\n');
+
+ colno = handle_core_registers (ebl, ebl->elf, desc + regs_offset,
+ reglocs, nregloc);
+ if (colno != 0)
+- putchar_unlocked ('\n');
++ putchar ('\n');
+ }
+
+ static void
+ handle_notes_data (Ebl *ebl, const GElf_Ehdr *ehdr,
+ GElf_Off start, Elf_Data *data)
+ {
+- fputs_unlocked (_(" Owner Data size Type\n"), stdout);
++ fputs (_(" Owner Data size Type\n"), stdout);
+
+ if (data == NULL)
+ goto bad_note;
+--- a/src/size.c
++++ b/src/size.c
+@@ -411,7 +411,7 @@ show_sysv (Elf *elf, const char *prefix,
+ maxlen = MAX (maxlen, (int) strlen (name));
+ }
+
+- fputs_unlocked (fname, stdout);
++ fputs (fname, stdout);
+ if (prefix != NULL)
+ printf (_(" (ex %s)"), prefix);
+ printf (":\n%-*s %*s %*s\n",
+@@ -483,7 +483,7 @@ show_sysv_one_line (Elf *elf)
+ continue;
+
+ if (! first)
+- fputs_unlocked (" + ", stdout);
++ fputs (" + ", stdout);
+ first = false;
+
+ printf ((radix == radix_hex ? "%" PRIx64 "(%s)"
+@@ -555,7 +555,7 @@ show_bsd (Elf *elf, const char *prefix,
+ fname);
+ if (prefix != NULL)
+ printf (_(" (ex %s)"), prefix);
+- fputs_unlocked ("\n", stdout);
++ fputs ("\n", stdout);
+
+ total_textsize += textsize;
+ total_datasize += datasize;
+@@ -607,7 +607,7 @@ show_segments (Elf *elf, const char *ful
+ continue;
+
+ if (! first)
+- fputs_unlocked (" + ", stdout);
++ fputs (" + ", stdout);
+ first = false;
+
+ printf (radix == radix_hex ? "%" PRIx64 "(%c%c%c)"
+--- a/src/strings.c
++++ b/src/strings.c
+@@ -345,8 +345,8 @@ process_chunk_mb (const char *fname, con
+ /* We found a match. */
+ if (unlikely (fname != NULL))
+ {
+- fputs_unlocked (fname, stdout);
+- fputs_unlocked (": ", stdout);
++ fputs (fname, stdout);
++ fputs (": ", stdout);
+ }
+
+ if (unlikely (radix != radix_none))
+@@ -357,7 +357,7 @@ process_chunk_mb (const char *fname, con
+
+ if (unlikely (*unprinted != NULL))
+ {
+- fputs_unlocked (*unprinted, stdout);
++ fputs (*unprinted, stdout);
+ free (*unprinted);
+ *unprinted = NULL;
+ }
+@@ -366,8 +366,8 @@ process_chunk_mb (const char *fname, con
+ assume the file data is encoded in UCS-2/UTF-16 or
+ UCS-4/UTF-32 respectively we could convert the string.
+ But there is no such guarantee. */
+- fwrite_unlocked (start, 1, buf - start, stdout);
+- putc_unlocked ('\n', stdout);
++ fwrite (start, 1, buf - start, stdout);
++ fputc ('\n', stdout);
+ }
+
+ start = ++buf;
+@@ -413,8 +413,8 @@ process_chunk (const char *fname, const
+ /* We found a match. */
+ if (likely (fname != NULL))
+ {
+- fputs_unlocked (fname, stdout);
+- fputs_unlocked (": ", stdout);
++ fputs (fname, stdout);
++ fputs (": ", stdout);
+ }
+
+ if (likely (radix != radix_none))
+@@ -425,12 +425,12 @@ process_chunk (const char *fname, const
+
+ if (unlikely (*unprinted != NULL))
+ {
+- fputs_unlocked (*unprinted, stdout);
++ fputs (*unprinted, stdout);
+ free (*unprinted);
+ *unprinted = NULL;
+ }
+- fwrite_unlocked (start, 1, buf - start, stdout);
+- putc_unlocked ('\n', stdout);
++ fwrite (start, 1, buf - start, stdout);
++ fputc ('\n', stdout);
+ }
+
+ start = ++buf;
+--- a/tests/showptable.c
++++ b/tests/showptable.c
+@@ -111,11 +111,11 @@ main (int argc, char *argv[])
+ (unsigned long long int) phdr->p_memsz,
+ (unsigned long long int) phdr->p_align);
+
+- putc_unlocked ((phdr->p_flags & PF_X) ? 'X' : ' ', stdout);
+- putc_unlocked ((phdr->p_flags & PF_W) ? 'W' : ' ', stdout);
+- putc_unlocked ((phdr->p_flags & PF_R) ? 'R' : ' ', stdout);
++ fputc ((phdr->p_flags & PF_X) ? 'X' : ' ', stdout);
++ fputc ((phdr->p_flags & PF_W) ? 'W' : ' ', stdout);
++ fputc ((phdr->p_flags & PF_R) ? 'R' : ' ', stdout);
+
+- putc_unlocked ('\n', stdout);
++ fputc ('\n', stdout);
+
+ if (phdr->p_type == PT_INTERP)
+ {