projects
/
deliverable
/
binutils-gdb.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
*** empty log message ***
[deliverable/binutils-gdb.git]
/
bfd
/
section.c
diff --git
a/bfd/section.c
b/bfd/section.c
index 4ee6c89863ab7d17d3b03ebcda862ad62d8a5b4a..dc8225f39d3329997b32dba497ef54c086078ef9 100644
(file)
--- a/
bfd/section.c
+++ b/
bfd/section.c
@@
-1,6
+1,6
@@
/* Object file "section" support for the BFD library.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
/* Object file "section" support for the BFD library.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
+ 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
, 2008, 2009
Free Software Foundation, Inc.
Written by Cygnus Support.
Free Software Foundation, Inc.
Written by Cygnus Support.
@@
-268,7
+268,7
@@
CODE_FRAGMENT
.
. {* If SEC_LINK_ONCE is set, this bitfield describes how the linker
. should handle duplicate sections. *}
.
. {* If SEC_LINK_ONCE is set, this bitfield describes how the linker
. should handle duplicate sections. *}
-.#define SEC_LINK_DUPLICATES 0x
4
0000
+.#define SEC_LINK_DUPLICATES 0x
c
0000
.
. {* This value for SEC_LINK_DUPLICATES means that duplicate
. sections with the same name should simply be discarded. *}
.
. {* This value for SEC_LINK_DUPLICATES means that duplicate
. sections with the same name should simply be discarded. *}
@@
-277,11
+277,11
@@
CODE_FRAGMENT
. {* This value for SEC_LINK_DUPLICATES means that the linker
. should warn if there are any duplicate sections, although
. it should still only link one copy. *}
. {* This value for SEC_LINK_DUPLICATES means that the linker
. should warn if there are any duplicate sections, although
. it should still only link one copy. *}
-.#define SEC_LINK_DUPLICATES_ONE_ONLY 0x
8
0000
+.#define SEC_LINK_DUPLICATES_ONE_ONLY 0x
4
0000
.
. {* This value for SEC_LINK_DUPLICATES means that the linker
. should warn if any duplicate sections are a different size. *}
.
. {* This value for SEC_LINK_DUPLICATES means that the linker
. should warn if any duplicate sections are a different size. *}
-.#define SEC_LINK_DUPLICATES_SAME_SIZE 0x
10
0000
+.#define SEC_LINK_DUPLICATES_SAME_SIZE 0x
8
0000
.
. {* This value for SEC_LINK_DUPLICATES means that the linker
. should warn if any duplicate sections contain different
.
. {* This value for SEC_LINK_DUPLICATES means that the linker
. should warn if any duplicate sections contain different
@@
-293,28
+293,28
@@
CODE_FRAGMENT
. relocation or other arcane processing. It is skipped when
. going through the first-pass output, trusting that someone
. else up the line will take care of it later. *}
. relocation or other arcane processing. It is skipped when
. going through the first-pass output, trusting that someone
. else up the line will take care of it later. *}
-.#define SEC_LINKER_CREATED 0x
2
00000
+.#define SEC_LINKER_CREATED 0x
1
00000
.
. {* This section should not be subject to garbage collection.
. Also set to inform the linker that this section should not be
. listed in the link map as discarded. *}
.
. {* This section should not be subject to garbage collection.
. Also set to inform the linker that this section should not be
. listed in the link map as discarded. *}
-.#define SEC_KEEP 0x
4
00000
+.#define SEC_KEEP 0x
2
00000
.
. {* This section contains "short" data, and should be placed
. "near" the GP. *}
.
. {* This section contains "short" data, and should be placed
. "near" the GP. *}
-.#define SEC_SMALL_DATA 0x
8
00000
+.#define SEC_SMALL_DATA 0x
4
00000
.
. {* Attempt to merge identical entities in the section.
. Entity size is given in the entsize field. *}
.
. {* Attempt to merge identical entities in the section.
. Entity size is given in the entsize field. *}
-.#define SEC_MERGE 0x
10
00000
+.#define SEC_MERGE 0x
8
00000
.
. {* If given with SEC_MERGE, entities to merge are zero terminated
. strings where entsize specifies character size instead of fixed
. size entries. *}
.
. {* If given with SEC_MERGE, entities to merge are zero terminated
. strings where entsize specifies character size instead of fixed
. size entries. *}
-.#define SEC_STRINGS 0x
2
000000
+.#define SEC_STRINGS 0x
1
000000
.
. {* This section contains data about section groups. *}
.
. {* This section contains data about section groups. *}
-.#define SEC_GROUP 0x
4
000000
+.#define SEC_GROUP 0x
2
000000
.
. {* The section is a COFF shared library section. This flag is
. only for the linker. If this type of section appears in
.
. {* The section is a COFF shared library section. This flag is
. only for the linker. If this type of section appears in
@@
-325,23
+325,27
@@
CODE_FRAGMENT
. might be cleaner to have some more general mechanism to
. allow the back end to control what the linker does with
. sections. *}
. might be cleaner to have some more general mechanism to
. allow the back end to control what the linker does with
. sections. *}
-.#define SEC_COFF_SHARED_LIBRARY 0x
10
000000
+.#define SEC_COFF_SHARED_LIBRARY 0x
4
000000
.
. {* This section contains data which may be shared with other
. executables or shared objects. This is for COFF only. *}
.
. {* This section contains data which may be shared with other
. executables or shared objects. This is for COFF only. *}
-.#define SEC_COFF_SHARED 0x
20
000000
+.#define SEC_COFF_SHARED 0x
8
000000
.
. {* When a section with this flag is being linked, then if the size of
. the input section is less than a page, it should not cross a page
. boundary. If the size of the input section is one page or more,
. it should be aligned on a page boundary. This is for TI
. TMS320C54X only. *}
.
. {* When a section with this flag is being linked, then if the size of
. the input section is less than a page, it should not cross a page
. boundary. If the size of the input section is one page or more,
. it should be aligned on a page boundary. This is for TI
. TMS320C54X only. *}
-.#define SEC_TIC54X_BLOCK 0x
4
0000000
+.#define SEC_TIC54X_BLOCK 0x
1
0000000
.
. {* Conditionally link this section; do not link if there are no
. references found to any symbol in the section. This is for TI
. TMS320C54X only. *}
.
. {* Conditionally link this section; do not link if there are no
. references found to any symbol in the section. This is for TI
. TMS320C54X only. *}
-.#define SEC_TIC54X_CLINK 0x80000000
+.#define SEC_TIC54X_CLINK 0x20000000
+.
+. {* Indicate that section has the no read flag set. This happens
+. when memory read flag isn't set. *}
+.#define SEC_COFF_NOREAD 0x40000000
.
. {* End of section flags. *}
.
.
. {* End of section flags. *}
.
@@
-357,9
+361,8
@@
CODE_FRAGMENT
. output sections that have an input section. *}
. unsigned int linker_has_input : 1;
.
. output sections that have an input section. *}
. unsigned int linker_has_input : 1;
.
-. {* Mark flag
s
used by some linker backends for garbage collection. *}
+. {* Mark flag used by some linker backends for garbage collection. *}
. unsigned int gc_mark : 1;
. unsigned int gc_mark : 1;
-. unsigned int gc_mark_from_eh : 1;
.
. {* The following flags are used by the ELF linker. *}
.
.
. {* The following flags are used by the ELF linker. *}
.
@@
-383,6
+386,9
@@
CODE_FRAGMENT
. {* Nonzero if this section has TLS related relocations. *}
. unsigned int has_tls_reloc:1;
.
. {* Nonzero if this section has TLS related relocations. *}
. unsigned int has_tls_reloc:1;
.
+. {* Nonzero if this section has a call to __tls_get_addr. *}
+. unsigned int has_tls_get_addr_call:1;
+.
. {* Nonzero if this section has a gp reloc. *}
. unsigned int has_gp_reloc:1;
.
. {* Nonzero if this section has a gp reloc. *}
. unsigned int has_gp_reloc:1;
.
@@
-637,17
+643,17
@@
CODE_FRAGMENT
. {* name, id, index, next, prev, flags, user_set_vma, *} \
. { NAME, IDX, 0, NULL, NULL, FLAGS, 0, \
. \
. {* name, id, index, next, prev, flags, user_set_vma, *} \
. { NAME, IDX, 0, NULL, NULL, FLAGS, 0, \
. \
-. {* linker_mark, linker_has_input, gc_mark,
gc_mark_from_eh,
*} \
-. 0, 0, 1,
0,
\
+. {* linker_mark, linker_has_input, gc_mark,
*} \
+. 0, 0, 1,
\
. \
. {* segment_mark, sec_info_type, use_rela_p, has_tls_reloc, *} \
. 0, 0, 0, 0, \
. \
. \
. {* segment_mark, sec_info_type, use_rela_p, has_tls_reloc, *} \
. 0, 0, 0, 0, \
. \
-. {* has_
gp_reloc, need_finalize_relax, reloc_done,
*} \
-. 0,
0, 0,
\
+. {* has_
tls_get_addr_call, has_gp_reloc, need_finalize_relax,
*} \
+. 0,
0, 0,
\
. \
. \
-. {*
vma, lma, size, rawsize
*} \
-. 0,
0, 0, 0,
\
+. {*
reloc_done, vma, lma, size, rawsize
*} \
+. 0,
0, 0, 0, 0,
\
. \
. {* output_offset, output_section, alignment_power, *} \
. 0, (struct bfd_section *) &SEC, 0, \
. \
. {* output_offset, output_section, alignment_power, *} \
. 0, (struct bfd_section *) &SEC, 0, \
@@
-1430,6
+1436,16
@@
bfd_get_section_contents (bfd *abfd,
if ((section->flags & SEC_IN_MEMORY) != 0)
{
if ((section->flags & SEC_IN_MEMORY) != 0)
{
+ if (section->contents == NULL)
+ {
+ /* This can happen because of errors earlier on in the linking process.
+ We do not want to seg-fault here, so clear the flag and return an
+ error code. */
+ section->flags &= ~ SEC_IN_MEMORY;
+ bfd_set_error (bfd_error_invalid_operation);
+ return FALSE;
+ }
+
memcpy (location, section->contents + offset, (size_t) count);
return TRUE;
}
memcpy (location, section->contents + offset, (size_t) count);
return TRUE;
}
This page took
0.026022 seconds
and
4
git commands to generate.