From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 27068 invoked by alias); 17 Jan 2011 14:07:16 -0000 Mailing-List: contact archer-commits-help@sourceware.org; run by ezmlm Sender: Precedence: bulk List-Post: List-Help: List-Subscribe: Received: (qmail 27029 invoked by uid 9674); 17 Jan 2011 14:07:15 -0000 Date: Mon, 17 Jan 2011 14:07:00 -0000 Message-ID: <20110117140714.27011.qmail@sourceware.org> From: jkratoch@sourceware.org To: archer-commits@sourceware.org Subject: [SCM] archer-jankratochvil-vla: Merge remote branch 'origin/master' into archer-jankratochvil-vla X-Git-Refname: refs/heads/archer-jankratochvil-vla X-Git-Reftype: branch X-Git-Oldrev: c15a44be841cddafd664e3e7d2a2136eb4418a8c X-Git-Newrev: 7e232e24ecbf52c751c3af7e9479cb4502845ab0 X-SW-Source: 2011-q1/txt/msg00053.txt.bz2 List-Id: The branch, archer-jankratochvil-vla has been updated via 7e232e24ecbf52c751c3af7e9479cb4502845ab0 (commit) via 54cd47005c5ee2158c538f725502b10fedadefc9 (commit) via 893e939f750c3d0018aca70a5b181f7554973854 (commit) via 0d8306bf351509bad634e46c2f85c942e9a0649e (commit) via afb11568c4568d0b5e90c87ae26ae2f9e1a56665 (commit) via 8714d5976f75118ff9e1b284c73b7a574369bc28 (commit) via 0894b5fe27eb14ef6ba5a8136b9a0ccbf81c9a6e (commit) via ed85087ca82b4eab3963a71f2e653766eb7f80fa (commit) from c15a44be841cddafd664e3e7d2a2136eb4418a8c (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email. - Log ----------------------------------------------------------------- commit 7e232e24ecbf52c751c3af7e9479cb4502845ab0 Merge: c15a44b 54cd470 Author: Jan Kratochvil Date: Mon Jan 17 15:05:52 2011 +0100 Merge remote branch 'origin/master' into archer-jankratochvil-vla ----------------------------------------------------------------------- Summary of changes: bfd/ChangeLog | 5 ++ bfd/elf64-x86-64.c | 33 ++++++++++++++++ bfd/version.h | 2 +- gdb/ChangeLog | 12 ++++++ gdb/p-exp.y | 106 +++++++++++++++++++++++++++++++++++++++++++-------- gdb/version.in | 2 +- 6 files changed, 141 insertions(+), 19 deletions(-) First 500 lines of diff: diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 37c49a3..00ff8ff 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2011-01-15 H.J. Lu + + * elf64-x86-64.c (elf_x86_64_check_relocs): Check invalid x32 + relocations. + 2011-01-14 H.J. Lu * elf64-x86-64.c (elf_x86_64_link_hash_table): Add pointer_r_type. diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c index 579f59c..9a3959a 100644 --- a/bfd/elf64-x86-64.c +++ b/bfd/elf64-x86-64.c @@ -1179,6 +1179,39 @@ elf_x86_64_check_relocs (bfd *abfd, struct bfd_link_info *info, h = (struct elf_link_hash_entry *) h->root.u.i.link; } + /* Check invalid x32 relocations. */ + if (!ABI_64_P (abfd)) + switch (r_type) + { + default: + break; + + case R_X86_64_64: + case R_X86_64_DTPOFF64: + case R_X86_64_TPOFF64: + case R_X86_64_PC64: + case R_X86_64_GOTOFF64: + case R_X86_64_GOT64: + case R_X86_64_GOTPCREL64: + case R_X86_64_GOTPC64: + case R_X86_64_GOTPLT64: + case R_X86_64_PLTOFF64: + { + if (h) + name = h->root.root.string; + else + name = bfd_elf_sym_name (abfd, symtab_hdr, isym, + NULL); + (*_bfd_error_handler) + (_("%B: relocation %s against symbol `%s' isn't " + "supported in x32 mode"), abfd, + x86_64_elf_howto_table[r_type].name, name); + bfd_set_error (bfd_error_bad_value); + return FALSE; + } + break; + } + if (h != NULL) { /* Create the ifunc sections for static executables. If we diff --git a/bfd/version.h b/bfd/version.h index 1c1d5ea..df12f23 100644 --- a/bfd/version.h +++ b/bfd/version.h @@ -1,4 +1,4 @@ -#define BFD_VERSION_DATE 20110115 +#define BFD_VERSION_DATE 20110117 #define BFD_VERSION @bfd_version@ #define BFD_VERSION_STRING @bfd_version_package@ @bfd_version_string@ #define REPORT_BUGS_TO @report_bugs_to@ diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 3788f8d..7db03c9 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,15 @@ +2011-01-17 Pierre Muller + + * p-exp.y (intvar): New static variable, used to set CURRENT_TYPE + for internal variables. + (last_was_structop): New static variable. + (COMPLETE): New token. + (field_exp): New rule to group all '.' suffix handling. + Add mark_struct_expression calls when approriate to be able + to correctly find fields for completion. + (yylex): Adapt to handle field completion and set INTVAR when + required. + 2011-01-14 Yao Qi * arm-tdep.c (arm_register_reggroup_p): FPS register is in diff --git a/gdb/p-exp.y b/gdb/p-exp.y index 21c3dbb..ec656d0 100644 --- a/gdb/p-exp.y +++ b/gdb/p-exp.y @@ -158,6 +158,7 @@ static int parse_number (char *, int, int, YYSTYPE *); static struct type *current_type; +static struct internalvar *intvar; static int leftdiv_is_integer; static void push_current_type (void); static void pop_current_type (void); @@ -184,6 +185,7 @@ static int search_field; %token STRING %token FIELDNAME +%token COMPLETE %token NAME /* BLOCKNAME defined below to give it higher precedence. */ %token TYPENAME %type name @@ -233,6 +235,7 @@ static int search_field; %% start : { current_type = NULL; + intvar = NULL; search_field = 0; leftdiv_is_integer = 0; } @@ -285,19 +288,56 @@ exp : DECREMENT '(' exp ')' %prec UNARY { write_exp_elt_opcode (UNOP_PREDECREMENT); } ; -exp : exp '.' { search_field = 1; } - FIELDNAME - /* name */ + +field_exp : exp '.' %prec UNARY + { search_field = 1; } + ; + +exp : field_exp FIELDNAME { write_exp_elt_opcode (STRUCTOP_STRUCT); - write_exp_string ($4); + write_exp_string ($2); + write_exp_elt_opcode (STRUCTOP_STRUCT); + search_field = 0; + if (current_type) + { + while (TYPE_CODE (current_type) + == TYPE_CODE_PTR) + current_type = + TYPE_TARGET_TYPE (current_type); + current_type = lookup_struct_elt_type ( + current_type, $2.ptr, 0); + } + } + ; + +exp : field_exp name + { mark_struct_expression (); + write_exp_elt_opcode (STRUCTOP_STRUCT); + write_exp_string ($2); write_exp_elt_opcode (STRUCTOP_STRUCT); search_field = 0; if (current_type) - { while (TYPE_CODE (current_type) == TYPE_CODE_PTR) - current_type = TYPE_TARGET_TYPE (current_type); + { + while (TYPE_CODE (current_type) + == TYPE_CODE_PTR) + current_type = + TYPE_TARGET_TYPE (current_type); current_type = lookup_struct_elt_type ( - current_type, $4.ptr, 0); }; - } ; + current_type, $2.ptr, 0); + } + } + ; + +exp : field_exp COMPLETE + { struct stoken s; + mark_struct_expression (); + write_exp_elt_opcode (STRUCTOP_STRUCT); + s.ptr = ""; + s.length = 0; + write_exp_string (s); + write_exp_elt_opcode (STRUCTOP_STRUCT); } + ; + exp : exp '[' /* We need to save the current_type value. */ { char *arrayname; @@ -516,8 +556,19 @@ exp : variable ; exp : VARIABLE - /* Already written by write_dollar_variable. */ - ; + /* Already written by write_dollar_variable. + Handle current_type. */ + { if (intvar) { + struct value * val, * mark; + + mark = value_mark (); + val = value_of_internalvar (parse_gdbarch, + intvar); + current_type = value_type (val); + value_release_to_mark (mark); + } + } + ; exp : SIZEOF '(' type ')' %prec UNARY { write_exp_elt_opcode (OP_LONG); @@ -1060,8 +1111,13 @@ static char * uptok (tokstart, namelen) uptokstart[namelen]='\0'; return uptokstart; } -/* Read one token, getting characters through lexptr. */ +/* This is set if the previously-returned token was a structure + operator '.'. This is used only when parsing to + do field name completion. */ +static int last_was_structop; + +/* Read one token, getting characters through lexptr. */ static int yylex () @@ -1075,7 +1131,9 @@ yylex () int explen, tempbufindex; static char *tempbuf; static int tempbufsize; - + int saw_structop = last_was_structop; + + last_was_structop = 0; retry: prev_lexptr = lexptr; @@ -1111,7 +1169,10 @@ yylex () switch (c = *tokstart) { case 0: - return 0; + if (saw_structop && search_field) + return COMPLETE; + else + return 0; case ' ': case '\t': @@ -1172,7 +1233,12 @@ yylex () case '.': /* Might be a floating point number. */ if (lexptr[1] < '0' || lexptr[1] > '9') - goto symbol; /* Nope, must be a symbol. */ + { + if (in_parse_field) + last_was_structop = 1; + goto symbol; /* Nope, must be a symbol. */ + } + /* FALL THRU into number case. */ case '0': @@ -1430,11 +1496,17 @@ yylex () if (*tokstart == '$') { + char c; /* $ is the normal prefix for pascal hexadecimal values but this conflicts with the GDB use for debugger variables so in expression to enter hexadecimal values we still need to use C syntax with 0xff */ write_dollar_variable (yylval.sval); + c = tokstart[namelen]; + tokstart[namelen] = 0; + intvar = lookup_only_internalvar (++tokstart); + --tokstart; + tokstart[namelen] = c; free (uptokstart); return VARIABLE; } @@ -1454,7 +1526,7 @@ yylex () if (search_field && current_type) is_a_field = (lookup_struct_elt_type (current_type, tmp, 1) != NULL); - if (is_a_field) + if (is_a_field || in_parse_field) sym = NULL; else sym = lookup_symbol (tmp, expression_context_block, @@ -1469,7 +1541,7 @@ yylex () } if (search_field && current_type) is_a_field = (lookup_struct_elt_type (current_type, tmp, 1) != NULL); - if (is_a_field) + if (is_a_field || in_parse_field) sym = NULL; else sym = lookup_symbol (tmp, expression_context_block, @@ -1497,7 +1569,7 @@ yylex () } if (search_field && current_type) is_a_field = (lookup_struct_elt_type (current_type, tmp, 1) != NULL); - if (is_a_field) + if (is_a_field || in_parse_field) sym = NULL; else sym = lookup_symbol (tmp, expression_context_block, diff --git a/gdb/version.in b/gdb/version.in index 5275ee7..ddb971d 100644 --- a/gdb/version.in +++ b/gdb/version.in @@ -1 +1 @@ -7.2.50.20110115-cvs +7.2.50.20110117-cvs hooks/post-receive -- Repository for Project Archer.