diff options
author | Richard Sandiford <rdsandiford@googlemail.com> | 2009-03-14 09:17:32 +0000 |
---|---|---|
committer | Richard Sandiford <rdsandiford@googlemail.com> | 2009-03-14 09:17:32 +0000 |
commit | 858ef0ce3bae131931bd6f1c24fab4acb90f89df (patch) | |
tree | 77a92d90fa2042ce333d8efb8967d6d43671c267 /ld | |
parent | 9f0eb2327b9c019347ecede4da1185ad21cca8af (diff) | |
download | gdb-858ef0ce3bae131931bd6f1c24fab4acb90f89df.zip gdb-858ef0ce3bae131931bd6f1c24fab4acb90f89df.tar.gz gdb-858ef0ce3bae131931bd6f1c24fab4acb90f89df.tar.bz2 |
include/coff/
* xcoff.h (XCOFF_CALLED, XCOFF_IMPORT): Update comments.
(XCOFF_WAS_UNDEFINED): New flag.
(xcoff_link_hash_table): Add an "rtld" field.
bfd/
* coff-rs6000.c (xcoff_ppc_relocate_section): Report relocations
against undefined symbols if the symbol's XCOFF_WAS_UNDEFINED
flag is set. Assert that all undefined symbols are either
imported or defined by a dynamic object.
* coff64-rs6000.c (xcoff64_ppc_relocate_section): Likewise.
* xcofflink.c (xcoff_link_add_symbols): Extend function-symbol
handling to all relocations. Only set XCOFF_CALLED for function
symbols.
(xcoff_find_function): New function, split out from...
(bfd_xcoff_export_symbol) ...here.
(xcoff_set_import_path): New function, split out from...
(bfd_xcoff_import_symbol): ...here. Remove assertion for old
meaning of XCOFF_CALLED.
(xcoff_mark_symbol): If we mark an undefined and unimported
symbol, find some way of defining it. If the symbol is a function
descriptor, fill in its definition automatically. If the symbol
is a function, mark its descriptor and allocate room for global
linkage code. Otherwise mark the symbol as implicitly imported.
Move the code for creating function descriptors from...
(xcoff_build_ldsyms): ...here. Use XCOFF_WAS_UNDEFINED to
check for symbols that were implicitly defined.
(xcoff_mark): Don't count any dynamic relocations against
function symbols.
(bfd_xcoff_size_dynamic_sections): Save the rtld parameter
in the xcoff link info.
(xcoff_link_input_bfd): Remove handling of undefined and
unexported symbols.
ld/
* emultempl/aix.em (gld${EMULATION_NAME}_handle_option): Make
-berok and -bernotok control link_info.unresolved_syms_in_objects
and link_info.unresolved_syms_in_shared_libs instead of
force_make_executable.
ld/testsuite/
* ld-powerpc/aix-glink-1.ex, ld-powerpc/aix-glink-1.s,
ld-powerpc/aix-glink-1-32.dd, ld-powerpc/aix-glink-1-64.dd,
ld-powerpc/aix-glink-1-32.d, ld-powerpc/aix-glink-1-64.d: New tests.
* ld-powerpc/aix52.exp: Run them.
Diffstat (limited to 'ld')
-rw-r--r-- | ld/ChangeLog | 7 | ||||
-rw-r--r-- | ld/emultempl/aix.em | 6 | ||||
-rw-r--r-- | ld/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | ld/testsuite/ld-powerpc/aix-glink-1-32.d | 5 | ||||
-rw-r--r-- | ld/testsuite/ld-powerpc/aix-glink-1-32.dd | 44 | ||||
-rw-r--r-- | ld/testsuite/ld-powerpc/aix-glink-1-64.d | 5 | ||||
-rw-r--r-- | ld/testsuite/ld-powerpc/aix-glink-1-64.dd | 49 | ||||
-rw-r--r-- | ld/testsuite/ld-powerpc/aix-glink-1.ex | 2 | ||||
-rw-r--r-- | ld/testsuite/ld-powerpc/aix-glink-1.s | 21 | ||||
-rw-r--r-- | ld/testsuite/ld-powerpc/aix52.exp | 6 |
10 files changed, 150 insertions, 2 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index fb3b552..40434eb 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,5 +1,12 @@ 2009-03-14 Richard Sandiford <r.sandiford@uk.ibm.com> + * emultempl/aix.em (gld${EMULATION_NAME}_handle_option): Make + -berok and -bernotok control link_info.unresolved_syms_in_objects + and link_info.unresolved_syms_in_shared_libs instead of + force_make_executable. + +2009-03-14 Richard Sandiford <r.sandiford@uk.ibm.com> + * emultempl/aix.em (gld${EMULATION_NAME}_before_parse): Set config.dynamic_link to TRUE. diff --git a/ld/emultempl/aix.em b/ld/emultempl/aix.em index 90465f2..a9f3884 100644 --- a/ld/emultempl/aix.em +++ b/ld/emultempl/aix.em @@ -379,11 +379,13 @@ gld${EMULATION_NAME}_handle_option (int optc) break; case OPTION_ERNOTOK: - force_make_executable = FALSE; + link_info.unresolved_syms_in_objects = RM_GENERATE_ERROR; + link_info.unresolved_syms_in_shared_libs = RM_GENERATE_ERROR; break; case OPTION_EROK: - force_make_executable = TRUE; + link_info.unresolved_syms_in_objects = RM_IGNORE; + link_info.unresolved_syms_in_shared_libs = RM_IGNORE; break; case OPTION_EXPORT: diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index 55e3a92..bc20d02 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,5 +1,12 @@ 2009-03-14 Richard Sandiford <r.sandiford@uk.ibm.com> + * ld-powerpc/aix-glink-1.ex, ld-powerpc/aix-glink-1.s, + ld-powerpc/aix-glink-1-32.dd, ld-powerpc/aix-glink-1-64.dd, + ld-powerpc/aix-glink-1-32.d, ld-powerpc/aix-glink-1-64.d: New tests. + * ld-powerpc/aix52.exp: Run them. + +2009-03-14 Richard Sandiford <r.sandiford@uk.ibm.com> + * ld-powerpc/aix-abs-branch-1.im, ld-powerpc/aix-abs-branch-1.ex, ld-powerpc/aix-abs-branch-1.s, ld-powerpc/aix-abs-branch-1.dd: New test. diff --git a/ld/testsuite/ld-powerpc/aix-glink-1-32.d b/ld/testsuite/ld-powerpc/aix-glink-1-32.d new file mode 100644 index 0000000..129845f --- /dev/null +++ b/ld/testsuite/ld-powerpc/aix-glink-1-32.d @@ -0,0 +1,5 @@ +#name: Glink test 1 (error) (32-bit) +#source: aix-glink-1.s +#as: -a32 +#ld: -b32 -bM:SRE -bnogc +#error: undefined reference to `\.ext' diff --git a/ld/testsuite/ld-powerpc/aix-glink-1-32.dd b/ld/testsuite/ld-powerpc/aix-glink-1-32.dd new file mode 100644 index 0000000..33cf812 --- /dev/null +++ b/ld/testsuite/ld-powerpc/aix-glink-1-32.dd @@ -0,0 +1,44 @@ + +.* + + +Disassembly of section \.text: + +10000000 <\.f1>: +10000000: 4e 80 00 20 br + +10000004 <\.f2>: +10000004: 48 00 00 05 bl 10000008 <\.f3> + +10000008 <\.f3>: +10000008: 4e 80 00 20 br + +1000000c <\.ext>: +1000000c: 81 82 00 00 l r12,0\(r2\) +10000010: 90 41 00 14 st r2,20\(r1\) +10000014: 80 0c 00 00 l r0,0\(r12\) +10000018: 80 4c 00 04 l r2,4\(r12\) +1000001c: 7c 09 03 a6 mtctr r0 +10000020: 4e 80 04 20 bctr +10000024: 00 00 00 00 \.long 0x0 +10000028: 00 0c 80 00 \.long 0xc8000 +1000002c: 00 00 00 00 \.long 0x0 + +Disassembly of section \.data: + +20000000 <foo>: +20000000: 20 00 00 08 .* +20000004: 10 00 00 0c .* + +20000008 <f1>: +20000008: 10 00 00 00 .* +2000000c: 20 00 00 20 .* +20000010: 00 00 00 00 .* + +20000014 <f2>: +20000014: 10 00 00 04 .* +20000018: 20 00 00 20 .* +2000001c: 00 00 00 00 .* + +20000020 <TOC>: + \.\.\. diff --git a/ld/testsuite/ld-powerpc/aix-glink-1-64.d b/ld/testsuite/ld-powerpc/aix-glink-1-64.d new file mode 100644 index 0000000..b8ee35f --- /dev/null +++ b/ld/testsuite/ld-powerpc/aix-glink-1-64.d @@ -0,0 +1,5 @@ +#name: Glink test 1 (error) (64-bit) +#source: aix-glink-1.s +#as: -a64 +#ld: -b64 -bM:SRE -bnogc +#error: undefined reference to `\.ext' diff --git a/ld/testsuite/ld-powerpc/aix-glink-1-64.dd b/ld/testsuite/ld-powerpc/aix-glink-1-64.dd new file mode 100644 index 0000000..b5a557c --- /dev/null +++ b/ld/testsuite/ld-powerpc/aix-glink-1-64.dd @@ -0,0 +1,49 @@ + +.* + + +Disassembly of section \.text: + +0000000010000000 <\.f1>: + 10000000: 4e 80 00 20 blr + +0000000010000004 <\.f2>: + 10000004: 48 00 00 05 bl 10000008 <\.f3> + +0000000010000008 <\.f3>: + 10000008: 4e 80 00 20 blr + +000000001000000c <\.ext>: + 1000000c: e9 82 00 00 ld r12,0\(r2\) + 10000010: f8 41 00 28 std r2,40\(r1\) + 10000014: e8 0c 00 00 ld r0,0\(r12\) + 10000018: e8 4c 00 08 ld r2,8\(r12\) + 1000001c: 7c 09 03 a6 mtctr r0 + 10000020: 4e 80 04 20 bctr + 10000024: 00 00 00 00 \.long 0x0 + 10000028: 00 0c a0 00 \.long 0xca000 + 1000002c: 00 00 00 00 \.long 0x0 + 10000030: 00 00 00 18 \.long 0x18 + +Disassembly of section \.data: + +0000000020000000 <foo>: + 20000000: 20 00 00 08 .* + 20000004: 10 00 00 0c .* + +0000000020000008 <f1>: + 20000008: 00 00 00 00 .* + 2000000c: 10 00 00 00 .* + 20000010: 00 00 00 00 .* + 20000014: 20 00 00 38 .* + \.\.\. + +0000000020000020 <f2>: + 20000020: 00 00 00 00 .* + 20000024: 10 00 00 04 .* + 20000028: 00 00 00 00 .* + 2000002c: 20 00 00 38 .* + \.\.\. + +0000000020000038 <TOC>: + \.\.\. diff --git a/ld/testsuite/ld-powerpc/aix-glink-1.ex b/ld/testsuite/ld-powerpc/aix-glink-1.ex new file mode 100644 index 0000000..643cdf3 --- /dev/null +++ b/ld/testsuite/ld-powerpc/aix-glink-1.ex @@ -0,0 +1,2 @@ +f2 +foo diff --git a/ld/testsuite/ld-powerpc/aix-glink-1.s b/ld/testsuite/ld-powerpc/aix-glink-1.s new file mode 100644 index 0000000..f7901b2 --- /dev/null +++ b/ld/testsuite/ld-powerpc/aix-glink-1.s @@ -0,0 +1,21 @@ + .toc + .globl .f1 + .csect .f1[PR] +.f1: + blr + + .globl .f2 + .csect .f2[PR] +.f2: + bl .f3 + + .globl .f3 + .csect .f3[PR] +.f3: + blr + + .globl foo + .csect foo[RW] +foo: + .long f1 + .long .ext diff --git a/ld/testsuite/ld-powerpc/aix52.exp b/ld/testsuite/ld-powerpc/aix52.exp index 632d0b9..41a2045 100644 --- a/ld/testsuite/ld-powerpc/aix52.exp +++ b/ld/testsuite/ld-powerpc/aix52.exp @@ -91,6 +91,12 @@ set aix52tests { "" {aix-core-sec-3.s} {{objdump -h aix-core-sec-3.hd}} "aix-core-sec-3.so"} + + {"Glink test 1" + "-shared -bE:aix-glink-1.ex --unresolved-symbols=ignore-all" + "" {aix-glink-1.s} + {{objdump {-D -j.text -j.data} aix-glink-1-SIZE.dd}} + "aix-glink-1.so"} } foreach test $aix52tests { |