[Firm] Probleme mit cparser

Moritz Kroll Moritz.Kroll at avira.com
Mon Feb 2 10:02:43 CET 2015


Hallo zusammen,

vielen Dank für all eure Vorschläge!
Hier die Ergebnisse:
 - Geupdated von 1.8.0 auf 1.9.5 -> "bad pack header"
 - pp.ipd.kit.edu für libfirm -> "bad pack header"
 - SSH -> Mein public Key wird nicht akzeptiert, obwohl ich ihn in
authorized_keys eingetragen habe und der Key angeboten wird. Muss man
bei Solaris noch etwas besonderes machen?

Ich verwende Puttys plink für git.


Hab die neue Version getestet und musste vom C++-Modus wieder zum
C-Modus wechseln, weil er jetzt plötzlich

   typedef unsigned short wchar_t;

nicht mehr mochte (was im C++-Modus auch richtig so ist).

Jetzt hatte ich aber das Problem (5.), dass MSVC doppelte Typedefs auch
im C-Modus zu erlauben scheint. Ich hab daher noch einen Patch dazu
angehängt.

Bisher hatte ich immer einige Problem-Keywords per #define wegdefiniert.
Jetzt hab ich __declspec mal scharf geschaltet und ein Problem (6.) mit

    typedef struct __declspec(align(8)) _XSAVE_AREA_HEADER

Ich habe dazu einen Testfall und einen Patch angehängt.

Sehr schön, jetzt brauch ich keine Spezialdefines mehr und muss nur noch
(per Python-Skript) alle ekligen "[source_annotation_attribute( ... )]"
Attribute und alle __asm Blöcke rauswerfen. Damit bin ich vollkommen
zufrieden :D

Schöne Grüße
Moritz


On 01.02.2015 21:54, Matthias Braun wrote:
> Ja beide URLs landen auf den “tollen” Solaris Kisten. Ich hab grade mal nachgeschaut, da läuft ein git-http-backend in Version 1.7.9 und spontan konnte ich keine Fehlermeldungen in den Logdateien sehen. Auf jeden Fall sieht man in den logs auch einige andere Kisten aus dem IPD die mit Version 1.8.X kommen und auch funktionieren, scheint also nicht nur die git Version zu sein zumindest.
> Hab die Version auf dem Server jetzt mal auf 1.8.4 hochgezogen (was neueres gabs in dem Solaris repository noch nicht :-(, keine Ahnung ob das was hilft. Falls du noch deinen IPD Account hast kannst dus aber auch mal über ssh probieren: ssh://USERNAME@ssh.info.uni-karlsruhe.de/ben/local/GIT/public/libfirm.git <ssh://USERNAME@ssh.info.uni-karlsruhe.de/ben/local/GIT/public/libfirm.git>
>
> Gruß
>       Matthias
>
>> On Feb 1, 2015, at 12:19 PM, Christoph Mallon <mallon at cs.uni-saarland.de> wrote:
>>
>> Am 31.01.15 01:33, schrieb Moritz Kroll:
>>> $ git clone http://pp.ipd.kit.edu/git/cparser.git
>>
>>> $ git submodule update --init
>>> Submodule 'libfirm' (http://pp.info.uni-karlsruhe.de/git/libfirm.git/)
>>
>> Das da sind Eigentlich(TM) dieselben Rechner, wie dir host bestätigen
>> sollte.
>> Daher ist es verwunderlich, dass cparser klonen geht, libfirm aber nicht.
>> Versuch mal testweise pp.ipd.kit.edu für das Submodul.
>> Das sollte Eigentlich(TM) keinen Unterschied geben, aber wer weiß das
>> schon so genau.
>>
>> Vermutlich läuft auf dem Server auch ein git von anno sonstwann, aber
>> ich komme nicht auf den Rechner.
>> Einer seiner Brüder fährt noch 1.7.9.5.
>> Also an der Version sollte es nicht liegen.
>>
>>      Christoph
>>
>> _______________________________________________
>> Firm mailing list
>> Firm at ira.uni-karlsruhe.de
>> https://lists.ira.uni-karlsruhe.de/mailman/listinfo/firm
>
>

--
Moritz Kroll
Software Developer & Researcher
Advanced Threat Research And Protection Systems
Email: moritz.kroll at avira.com

--
Avira Operations GmbH & Co. KG
Kaplaneiweg 1 | 88069 Tettnang | Deutschland / Germany
Telefon / Telephone: +49 7542-500 0
Telefax / Facsimile: +49 7542-500 3000

Registergericht: Amtsgericht Ulm, HRA 722586 | USt.-IdNr.: DE 815289569 | Pers. haftende Gesellschafterin: Avira OP GmbH | Firmensitz: Tettnang | Registergericht: Amtsgericht Ulm, HRB 726712 | Geschäftsführer: Travis Witteveen

Commercial Register: Amtsgericht Ulm, HRA 722586 | VAT-ID: DE 815289569 | Personally Liable Partner: Avira OP GmbH | Headquarters: Tettnang | Commercial Register: Amtsgericht Ulm, HRB 726712 | Chief Executive Officer (CEO): Travis Witteveen
-------------- next part --------------
>From 086538b3ffcece642548c0bfc1f98c150b1758f8 Mon Sep 17 00:00:00 2001
From: Moritz Kroll <moritz.kroll at avira.com>
Date: Mon, 2 Feb 2015 08:50:21 +0100
Subject: [PATCH] Also allow double typedefs in Microsoft mode

---
 src/parser/parser.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/parser/parser.c b/src/parser/parser.c
index 1e67844..bf32820 100644
--- a/src/parser/parser.c
+++ b/src/parser/parser.c
@@ -3961,8 +3961,8 @@ entity_t *record_entity(entity_t *entity, const bool is_definition)
 			if (kind == ENTITY_TYPEDEF) {
 				type_t *const type      = skip_typeref(entity->declaration.type);
 				type_t *const prev_type = skip_typeref(previous->declaration.type);
-				if (dialect.cpp) {
-					/* C++ allows double typedef if they are identical
+				if (dialect.cpp || dialect.ms) {
+					/* C++ and MS C allows double typedef if they are identical
 					 * (after skipping typedefs) */
 					if (types_same(type, prev_type))
 						goto finish;
-- 
1.9.5.msysgit.0

-------------- next part --------------
typedef struct __declspec(align(8)) _XSAVE_AREA_HEADER {
    int a;
    int b;
} XSAVE_AREA_HEADER;

int main() { return 0; }
-------------- next part --------------
>From d9fc1d91d20ae1d0b87064dde316118a43833680 Mon Sep 17 00:00:00 2001
From: Moritz Kroll <moritz.kroll at avira.com>
Date: Mon, 2 Feb 2015 09:12:35 +0100
Subject: [PATCH] Allow __declspec in struct and union declarations

---
 src/parser/parser.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/src/parser/parser.c b/src/parser/parser.c
index 1e67844..1f66bc8 100644
--- a/src/parser/parser.c
+++ b/src/parser/parser.c
@@ -145,6 +145,8 @@ static void          parse_external(void);
 
 static void parse_compound_type_entries(compound_t *compound_declaration);
 
+static attribute_t *parse_microsoft_extended_decl_modifier(attribute_t *first);
+
 static void check_call_argument(type_t *expected_type,
                                 call_argument_t *argument, unsigned pos);
 
@@ -2124,6 +2126,8 @@ static type_t *parse_compound_type_specifier(bool const is_struct)
 
 	if (token.kind == T___attribute__) {
 		attributes = parse_attributes(NULL);
+	} else if (token.kind == T__declspec) {
+		attributes = parse_microsoft_extended_decl_modifier(NULL);
 	}
 
 	entity_kind_t const kind = is_struct ? ENTITY_STRUCT : ENTITY_UNION;
-- 
1.9.5.msysgit.0



More information about the Firm mailing list