From b0fd6b3037669534962b1ffe860db178ea7e1239 Mon Sep 17 00:00:00 2001 From: Jan Kratochvil Date: Thu, 2 Jul 2015 08:01:35 +0200 Subject: debug compile: Replace confusing debug message It was found that from (gdb) set debug compile 1 (gdb) compile code 1 [...] allocated 0x7f bytes at 0x7ffff7ff9000 prot 5 allocated 0x38 bytes at 0x7ffff7ff8000 prot 1 lookup undefined ELF symbol "_GLOBAL_OFFSET_TABLE_" allocated 0x10 bytes at 0x7ffff7ff7000 for registers (gdb) _ the message 'lookup undefined ELF symbol' looks as an error to people, including to myself once. Change it to: allocated 0x7f bytes at 0x7ffff7ff9000 prot 5 allocated 0x38 bytes at 0x7ffff7ff8000 prot 1 ELF symbol "_GLOBAL_OFFSET_TABLE_" relocated to zero allocated 0x10 bytes at 0x7ffff7ff7000 for registers (gdb) _ gdb/ChangeLog 2015-07-02 Jan Kratochvil * compile/compile-object-load.c (compile_object_load): Replace debug message "lookup undefined ELF symbol" by 3 more specific messages. --- gdb/compile/compile-object-load.c | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) (limited to 'gdb/compile') diff --git a/gdb/compile/compile-object-load.c b/gdb/compile/compile-object-load.c index 2b29b8b..8298748 100644 --- a/gdb/compile/compile-object-load.c +++ b/gdb/compile/compile-object-load.c @@ -731,14 +731,18 @@ compile_object_load (const char *object_file, const char *source_file, if (sym->flags != 0) continue; - if (compile_debug) - fprintf_unfiltered (gdb_stdlog, - "lookup undefined ELF symbol \"%s\"\n", - sym->name); sym->flags = BSF_GLOBAL; sym->section = bfd_abs_section_ptr; if (strcmp (sym->name, "_GLOBAL_OFFSET_TABLE_") == 0) { + if (compile_debug) + fprintf_unfiltered (gdb_stdlog, + "ELF symbol \"%s\" relocated to zero\n", + sym->name); + + /* It seems to be a GCC bug, with -mcmodel=large there should be no + need for _GLOBAL_OFFSET_TABLE_. Together with -fPIE the data + remain PC-relative even with _GLOBAL_OFFSET_TABLE_ as zero. */ sym->value = 0; continue; } @@ -748,10 +752,21 @@ compile_object_load (const char *object_file, const char *source_file, { case mst_text: sym->value = BMSYMBOL_VALUE_ADDRESS (bmsym); + if (compile_debug) + fprintf_unfiltered (gdb_stdlog, + "ELF mst_text symbol \"%s\" relocated to %s\n", + sym->name, + paddress (target_gdbarch (), sym->value)); break; case mst_text_gnu_ifunc: sym->value = gnu_ifunc_resolve_addr (target_gdbarch (), BMSYMBOL_VALUE_ADDRESS (bmsym)); + if (compile_debug) + fprintf_unfiltered (gdb_stdlog, + "ELF mst_text_gnu_ifunc symbol \"%s\" " + "relocated to %s\n", + sym->name, + paddress (target_gdbarch (), sym->value)); break; default: warning (_("Could not find symbol \"%s\" " -- cgit v1.1