From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by sourceware.org (Postfix) with ESMTPS id 1978D383378B for ; Wed, 22 Jun 2022 13:54:01 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 1978D383378B Received: from mail-pj1-f70.google.com (mail-pj1-f70.google.com [209.85.216.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-35-IkNxWdJZOdKRcvKeM_6-jQ-1; Wed, 22 Jun 2022 09:53:59 -0400 X-MC-Unique: IkNxWdJZOdKRcvKeM_6-jQ-1 Received: by mail-pj1-f70.google.com with SMTP id il9-20020a17090b164900b001e31dd8be25so10873141pjb.3 for ; Wed, 22 Jun 2022 06:53:59 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:content-transfer-encoding:from:mime-version :subject:date:message-id:references:cc:in-reply-to:to; bh=wgly2n26i+7caDF+86Y+OE70ZF2KMguZSdrGzZBgzyo=; b=lauNa6/vuBDSQt7kRjy3gDgGUZAi/Cq0LUCdM7M+GHpwNnIKB+xzLki35HjuOJiVhi e2enkXCSToijLAh0KbZH16njY/p7HzOHSGtuMkii7rqMxP8Vl9OGAj5ZAYmHoBZZ0VsR /yulirzOXKFCVRR0LwpzesYi33nEpTxXw6dJp6GjTUSe68ruotyQwo/E08d4xLO1X6Ix vG4ZbWQ2VohM/qSt+ZRIKnQ2K0B8NB6sdyzpo5yWa9OyBuRUeLhPpj6ZaoKRtG4Wl2F3 hrLu/uJkuc+Tg4w98tWOlCdPhqvSkvyJygxddHctiehuijvqdd+CHBd1/e6yS1oE9VBw xy9Q== X-Gm-Message-State: AJIora8iVunEEC8U298MHNks1YPolpUpiev8BDOKiWFolfCB1mXy0EGb 8RIgOJhy/7Y0OllcQZADGglvQXC6nor4ewzhxjkV8OeUm5BgNxGW6zLLrZUIhNLY0txCKe7Ethv v4Gn3w6AZ3taYb7Wc7FLeTkNF7QXbJ8p4JzS9jsBE8jx5Yel/YFbV7segZH5ALwgfwPXsq/8= X-Received: by 2002:a63:ef0b:0:b0:40d:287d:71e1 with SMTP id u11-20020a63ef0b000000b0040d287d71e1mr3023664pgh.330.1655906037660; Wed, 22 Jun 2022 06:53:57 -0700 (PDT) X-Google-Smtp-Source: AGRyM1vl8k2dtc9Mw3h9mrnOWY2UHr55JzAh7CJC/fOl1OQjQLWZis5yfS2SXEXGp+9NR8GfZqg1Qg== X-Received: by 2002:a63:ef0b:0:b0:40d:287d:71e1 with SMTP id u11-20020a63ef0b000000b0040d287d71e1mr3023621pgh.330.1655906036936; Wed, 22 Jun 2022 06:53:56 -0700 (PDT) Received: from smtpclient.apple ([47.208.188.184]) by smtp.gmail.com with ESMTPSA id z126-20020a626584000000b0051bd9568140sm13583787pfb.109.2022.06.22.06.53.55 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 22 Jun 2022 06:53:56 -0700 (PDT) From: Ben Woodard Mime-Version: 1.0 (1.0) Subject: Re: 'src/abg-dwarf-reader.cc:compare_dies_string_attribute_value' optimization Date: Wed, 22 Jun 2022 01:09:49 -0700 Message-Id: <3BA457A8-B503-49A8-A6C1-EC8D11C6BE92@redhat.com> References: <87edzjgvps.fsf@seketeli.org> Cc: libabigail@sourceware.org In-Reply-To: <87edzjgvps.fsf@seketeli.org> To: Dodji Seketeli X-Mailer: iPad Mail (19F77) X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-4.3 required=5.0 tests=BAYES_00, DATE_IN_PAST_03_06, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_DNSWL_LOW, SPF_HELO_NONE, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE, WEIRD_PORT autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: libabigail@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Mailing list of the Libabigail project List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Jun 2022 13:54:06 -0000 I think you have an infinite loop in there somewhere. Abidw has been runnin= g for more than 15 hours on one library and still hasn=E2=80=99t completed. 312 pts/4 R+ 924:34 abidw --abidiff /lib64/dyninst/libdyninstAPI.s= o.12.0.1 This was with the libdyninstAPI.so from dyninst-12.0.1-3.fc36.x86_64 The backtrace is too long to post about 500 levels deep but here are the to= p 20 frames. It looks to be deep in comparison. I=E2=80=99ve never seen these RTTI warnings before. 3916 get_size_in_bits() const; (gdb) bt #0 0x00007fd7746fe74b in virtual thunk to abigail::ir::class_or_union::get= _size_in_bits() const () at /home/ben/Work/libabigail/build/../include/abg-= ir.h:3916 #1 0x00007fd7746dc91d in abigail::ir::equals (l=3Dwarning: RTTI symbol not= found for class 'abigail::ir::union_decl [clone .localalias]' ..., r=3Dwarning: RTTI symbol not found for class 'abigail::ir::union_decl = [clone .localalias]' ..., k=3D0x0) at ../../src/abg-ir.cc:14240 #2 0x00007fd7747011b9 in abigail::ir::equals (l=3Dwarning: RTTI symbol not= found for class 'abigail::ir::union_decl [clone .localalias]' ..., r=3Dwarning: RTTI symbol not found for class 'abigail::ir::union_decl = [clone .localalias]' ..., k=3D0x0) at ../../src/abg-ir.cc:21565 #3 0x00007fd7746f04bf in abigail::ir::type_base::operator!=3D (other=3D...= , this=3D0xf39bf50) at ../../src/abg-ir.cc:14263 #4 abigail::ir::equals (l=3Dwarning: RTTI symbol not found for class 'abig= ail::ir::var_decl [clone .localalias]' ..., r=3Dwarning: RTTI symbol not found for class 'abigail::ir::var_decl [c= lone .localalias]' ..., k=3D0x0) at ../../src/abg-ir.cc:18413 #5 0x00007fd7746ba48e in abigail::ir::decl_base::operator!=3D (this=3D, other=3D...) at ../../src/abg-ir.cc:5221 #6 0x00007fd7747012d6 in abigail::ir::equals (l=3Dwarning: RTTI symbol not= found for class 'abigail::ir::class_decl [clone .localalias]' ..., r=3Dwarning: RTTI symbol not found for class 'abigail::ir::class_decl = [clone .localalias]' ..., k=3D0x0) at /usr/include/c++/12/bits/shared_ptr_base.h:1349 #7 0x00007fd77470a724 in abigail::ir::equals (l=3Dwarning: RTTI symbol not= found for class 'abigail::ir::class_decl [clone .localalias]' ..., r=3Dwarning: RTTI symbol not found for class 'abigail::ir::class_decl = [clone .localalias]' ..., k=3D0x0) at ../../src/abg-ir.cc:23108 #8 0x00007fd7746ee4d4 in abigail::ir::type_base::operator!=3D (other=3D...= , this=3D0xf391868) at ../../src/abg-ir.cc:14263 #9 abigail::ir::equals (l=3D..., r=3Dwarning: RTTI symbol not found for cl= ass 'abigail::ir::typedef_decl [clone .localalias]' ..., k=3D0x0) at ../../src/abg-ir.cc:18108 #10 0x00007fd7746f04bf in abigail::ir::type_base::operator!=3D (other=3D...= , this=3D0xf527130) at ../../src/abg-ir.cc:14263 #11 abigail::ir::equals (l=3Dwarning: RTTI symbol not found for class 'abig= ail::ir::var_decl [clone .localalias]' ..., r=3Dwarning: RTTI symbol not found for class 'abigail::ir::var_decl [c= lone .localalias]' ..., k=3D0x0) at ../../src/abg-ir.cc:18413 #12 0x00007fd7746ba48e in abigail::ir::decl_base::operator!=3D (this=3D, other=3D...) at ../../src/abg-ir.cc:5221 #13 0x00007fd7747012d6 in abigail::ir::equals (l=3Dwarning: RTTI symbol not= found for class 'abigail::ir::class_decl [clone .localalias]' ..., r=3Dwarning: RTTI symbol not found for class 'abigail::ir::class_decl = [clone .localalias]' ..., k=3D0x0) at /usr/include/c++/12/bits/shared_ptr_base.h:1349 #14 0x00007fd77470a724 in abigail::ir::equals (l=3Dwarning: RTTI symbol not= found for class 'abigail::ir::class_decl [clone .localalias]' ..., r=3Dwarning: RTTI symbol not found for class 'abigail::ir::class_decl = [clone .localalias]' ..., k=3D0x0) at ../../src/abg-ir.cc:23108 #15 0x00007fd7746f04bf in abigail::ir::type_base::operator!=3D (other=3D...= , this=3D0x18d32928) at ../../src/abg-ir.cc:14263 #16 abigail::ir::equals (l=3Dwarning: RTTI symbol not found for class 'abig= ail::ir::var_decl [clone .localalias]' ..., r=3Dwarning: RTTI symbol not found for class 'abigail::ir::var_decl [c= lone .localalias]' ..., k=3D0x0) at ../../src/abg-ir.cc:18413 #17 0x00007fd7746ba48e in abigail::ir::decl_base::operator!=3D (this=3D, other=3D...) at ../../src/abg-ir.cc:5221 #18 0x00007fd7747012d6 in abigail::ir::equals (l=3Dwarning: RTTI symbol not= found for class 'abigail::ir::class_decl [clone .localalias]' ..., r=3Dwarning: RTTI symbol not found for class 'abigail::ir::class_decl = [clone .localalias]' ..., k=3D0x0) at /usr/include/c++/12/bits/shared_ptr_base.h:1349 #19 0x00007fd77470a724 in abigail::ir::equals (l=3Dwarning: RTTI symbol not= found for class 'abigail::ir::class_decl [clone .localalias]' ..., r=3Dwarning: RTTI symbol not found for class 'abigail::ir::class_decl = [clone .localalias]' ..., k=3D0x0) at ../../src/abg-ir.cc:23108 -ben > On Jun 20, 2022, at 9:12 AM, Dodji Seketeli wrote: >=20 > =EF=BB=BFHello Thomas et al., >=20 > I have finally applied a fix for this issue that you reported. >=20 > It can be read at https://sourceware.org/git/?p=3Dlibabigail.git;a=3Dcomm= it;h=3D0529e3b9ee09c29137952b3a5d4a7cc10484649a. >=20 > Thanks for reporting this and sorry for the inconvenience. >=20 > Cheers, >=20 > Thomas Schwinge a =C3=A9crit: >=20 >> Hi! >>=20 >> It's late on a Friday evening, and very well this may just be me not >> understanding libabigail/DWARF ;-) -- in context of >> or >> , I did a >> simple experiment to disable the >> 'src/abg-dwarf-reader.cc:compare_dies_string_attribute_value' >> optimization: >>=20 >> --- src/abg-dwarf-reader.cc >> +++ src/abg-dwarf-reader.cc >> [...] >> /// This function is a fast routine (optimization) to compare the >> /// values of two string attributes of two DIEs. >> /// >> /// @param l the first DIE to consider. >> /// >> /// @param r the second DIE to consider. >> /// >> /// @param attr_name the name of the attribute to compare, on the tw= o >> /// DIEs above. >> /// >> /// @param result out parameter. This is set to the result of the >> /// comparison. If the value of attribute @p attr_name on DIE @p l >> /// equals the value of attribute @p attr_name on DIE @p r, then the >> /// the argument of this parameter is set to true. Otherwise, it's >> /// set to false. Note that the argument of this parameter is set i= ff >> /// the function returned true. >> /// >> /// @return true iff the comparison could be performed. There are >> /// cases in which the comparison cannot be performed. For instance= , >> /// if one of the DIEs does not have the attribute @p attr_name. In >> /// any case, if this function returns true, then the parameter @p >> /// result is set to the result of the comparison. >> static bool >> compare_dies_string_attribute_value(const Dwarf_Die *l, const Dwarf_= Die *r, >> unsigned attr_name, >> bool &result) >> { >> Dwarf_Attribute l_attr, r_attr; >> if (!dwarf_attr_integrate(const_cast(l), attr_name, &l= _attr) >> || !dwarf_attr_integrate(const_cast(r), attr_name,= &r_attr)) >> return false; >>=20 >> ABG_ASSERT(l_attr.form =3D=3D DW_FORM_strp >> || l_attr.form =3D=3D DW_FORM_string >> || l_attr.form =3D=3D DW_FORM_GNU_strp_alt >> || form_is_DW_FORM_strx(l_attr.form) >> || form_is_DW_FORM_line_strp(l_attr.form)); >>=20 >> ABG_ASSERT(r_attr.form =3D=3D DW_FORM_strp >> || r_attr.form =3D=3D DW_FORM_string >> || r_attr.form =3D=3D DW_FORM_GNU_strp_alt >> || form_is_DW_FORM_strx(r_attr.form) >> || form_is_DW_FORM_line_strp(r_attr.form)); >>=20 >> +#if 0 >> if ((l_attr.form =3D=3D DW_FORM_strp >> && r_attr.form =3D=3D DW_FORM_strp) >> || (l_attr.form =3D=3D DW_FORM_GNU_strp_alt >> && r_attr.form =3D=3D DW_FORM_GNU_strp_alt) >> || (form_is_DW_FORM_strx(l_attr.form) >> && form_is_DW_FORM_strx(r_attr.form)) >> || (form_is_DW_FORM_line_strp(l_attr.form) >> && form_is_DW_FORM_line_strp(r_attr.form))) >> { >> // So these string attributes are actually pointers into a >> // string table. The string table is most likely de-duplicate= d >> // so comparing the *values* of the pointers should be enough. >> // >> // This is the fast path. >> if (l_attr.valp =3D=3D r_attr.valp) >> result =3D true; >> else if (l_attr.valp && r_attr.valp) >> result =3D *l_attr.valp =3D=3D *r_attr.valp; >> else >> result =3D false; >> return true; >> } >> +#endif >>=20 >> // If we reached this point it means we couldn't use the fast path >> // because the string atttributes are strings that are "inline" in >> // the debug info section. Let's just compare them the slow and >> // obvious way. >> string l_str =3D die_string_attribute(l, attr_name), >> r_str =3D die_string_attribute(r, attr_name); >> result =3D l_str =3D=3D r_str; >>=20 >> return true; >> } >>=20 >> My assumption was that this shouldn't change anything other than possibl= y >> regress performance. However: >>=20 >> [-PASS:-]{+FAIL:+} runtestreaddwarf >>=20 >> --- build-libabigail/tests/runtestreaddwarf.log >> +++ build-libabigail/tests/runtestreaddwarf.log >> [...] >> -PASS runtestreaddwarf (exit status: 0) >> +--- [...]/source-libabigail/tests/data/test-read-dwarf/PR25007-sdhci= .ko.abi 2022-01-28 22:48:07.049805043 +0100 >> ++++ [...]/build-libabigail/tests/output/test-read-dwarf/PR25007-sdhc= i.ko.abi 2022-01-28 23:15:30.261483063 +0100 >> +@@ -10107,10 +10107,19 @@ >> + >> + >> + >> ++ >> ++ >> ++ >> ++ >> ++ >> + >> + >> + >> + >> ++ >> ++ >> ++ >> ++ >> + >> + >> + >> +@@ -10138,6 +10147,10 @@ >> + >> + >> + >> ++ >> ++ >> ++ >> ++ >> + >> + >> + >> +@@ -10181,6 +10194,16 @@ >> + >> + >> + >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> + >> + >> + >> +@@ -10370,6 +10393,13 @@ >> + >> + >> + >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> + >> + >> + >> +@@ -10519,6 +10549,31 @@ >> + >> + >> + >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> + >> + >> + >> +@@ -10531,6 +10586,17 @@ >> + >> + >> + >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> + >> + >> + >> +@@ -10591,6 +10657,10 @@ >> + >> + >> + >> ++ >> ++ >> ++ >> ++ >> + >> + >> + >> +@@ -10631,6 +10701,22 @@ >> + >> + >> + >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> + >> + >> + >> +@@ -10746,6 +10832,10 @@ >> + >> + >> + >> ++ >> ++ >> ++ >> ++ >> + >> + >> + >> +@@ -10770,6 +10860,14 @@ >> + >> + >> + >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> + >> + >> + >> +@@ -10815,6 +10913,9 @@ >> + >> + >> + >> ++ >> ++ >> ++ >> + >> + >> + >> +@@ -10859,6 +10960,15 @@ >> + >> + >> + >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> + >> + >> + >> +@@ -10885,11 +10995,44 @@ >> + >> + >> + >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> + >> + >> + >> + >> + >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> + >> + >> + >> +@@ -10923,6 +11066,18 @@ >> + >> + >> + >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> + >> + >> + >> +@@ -10936,6 +11091,14 @@ >> + >> + >> + >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> + >> + >> + >> +@@ -10949,6 +11112,10 @@ >> + >> + >> + >> ++ >> ++ >> ++ >> ++ >> + >> + >> + >> +@@ -11075,12 +11242,26 @@ >> + >> + >> + >> ++ >> ++ >> ++ >> ++ >> + >> + >> + >> + >> + >> + >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> + >> + >> + >> +@@ -11124,6 +11305,15 @@ >> + >> + >> + >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> + >> + >> + >> +@@ -11192,10 +11382,19 @@ >> + >> + >> + >> ++ >> ++ >> ++ >> ++ >> ++ >> + >> + >> + >> + >> ++ >> ++ >> ++ >> ++ >> + >> + >> + >> +@@ -11210,6 +11409,10 @@ >> + >> + >> + >> ++ >> ++ >> ++ >> ++ >> + >> + >> + >> +@@ -11224,6 +11427,9 @@ >> + >> + >> + >> ++ >> ++ >> ++ >> + >> + >> + >> +@@ -11241,223 +11447,6 @@ >> + >> + >> + >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> + >> + >> + >> +@@ -11477,48 +11466,19 @@ >> + >> + >> + >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> ++ >> + >> + >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> +- >> + >> + >> + >> +ABIs differ: >> +[...]/source-libabigail/tests/data/test-read-dwarf/PR25007-sdhci.ko.= abi >> +and: >> +[...]/build-libabigail/tests/output/test-read-dwarf/PR25007-sdhci.ko= .abi >> + >> +FAIL runtestreaddwarf (exit status: 1) >>=20 >> Only that one test case. >>=20 >> The reordered 'function-type's -- but I've not yet verified whether >> they're really just reordered -- may hint towards a sorting stability >> issue, but there are also the disappearing 'class-decl's. >>=20 >> Unless somebody points out any misunderstanding on my side, I suppose I >> shall try to figure out what's going wrong. >>=20 >>=20 >> Gr=C3=BC=C3=9Fe >> Thomas >> ----------------- >> Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstra=C3=9Fe = 201, 80634 M=C3=BCnchen; Gesellschaft mit beschr=C3=A4nkter Haftung; Gesch= =C3=A4ftsf=C3=BChrer: Thomas Heurung, Frank Th=C3=BCrauf; Sitz der Gesellsc= haft: M=C3=BCnchen; Registergericht M=C3=BCnchen, HRB 106955 >=20 > --=20 > Dodji >=20