From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-lf1-x12a.google.com (mail-lf1-x12a.google.com [IPv6:2a00:1450:4864:20::12a]) by sourceware.org (Postfix) with ESMTPS id 5C9A039484BE for ; Wed, 6 Jan 2021 13:52:31 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 5C9A039484BE Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=2ndquadrant.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=craig.ringer@2ndquadrant.com Received: by mail-lf1-x12a.google.com with SMTP id h22so6726542lfu.2 for ; Wed, 06 Jan 2021 05:52:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=2ndquadrant-com.20150623.gappssmtp.com; s=20150623; h=mime-version:from:date:message-id:subject:to; bh=d0M0sttsJvVg/yvuaJSv7gKzTclAjhucsTUc3fG16jY=; b=W4xeCoeIH7y0Og3FV6GkMRFAyUjljp804sER0Pe6WGZx39M3tkMojcA+/eN8m6/PLt FlKD5qfpdWhEe6eNQRtLTE2nm3DC2K2TxZQtnuobWmDj07fS6hPO6rLZBly9SRc5Y6Lf l8WHCxolRvs+HeP6QLhvl+cY6kELb91PGfsA2QPTdvndYRaxoZbgWzdLR2WuRAS+LgHS mrlGkTRlYY2yqppEKNoq3wn2gRXSnJv6+5wcgGzWKBAqJTuvrK4d1nRV/qWTBhEl6Q/A hWsh7ByVEZmhQWAeQOmwyxORn4QzmYf4ZMsz8FdxW4uFpp/CcvjftZY8FtOuyvKqD0DC 1sWg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=d0M0sttsJvVg/yvuaJSv7gKzTclAjhucsTUc3fG16jY=; b=gIrSu6iaVnI+6LNKKuiKZ16zOFe/pcBsRgC6tlwp0c4b+B5V63QSjoyl78VbV411Oi 0wffMUNCuIm+82QJj4OUWrERmGsNXxkSyncurSDS/SkIxnC6TZaM6Jg7HN+FTzc09WrI +uJFafecbrSBAE3vubpKoxlBAdh95jnvgojpJNNGdXBPLj/MuN8J5Q4fsh7Wkz5n2C+j 7xg1tqo3G0/h354L06lbryWTEw3vh2aPwn9bl7ybf4QzqmLskrLWCtgPeN7vwQus6Svj 7rP/RvBxGVhb27/CJ9pL+CuHHIbn3YUwHJrhL7idqWUIrqlIn2ZWCDRobQZzPW5/WAxG RmTw== X-Gm-Message-State: AOAM531A3SOC7EGDzT2en2WHUjEqhJuZEnXUiP6X3idjqETVxcsqJKsb NFEDrPXSB2ldYMFDqp63do7IsSTP3swHBl4pQlpCSLNmXuJM4rWz X-Google-Smtp-Source: ABdhPJyUc5Rez0nIzo1H1ufMXe95XfDBN0B0yx7TnzYZ6L509Bvxe01zhtOG1CagEkXyRv0A7jmJkFVJv4hlN7RYkL4= X-Received: by 2002:a2e:878a:: with SMTP id n10mr2000841lji.236.1609941149734; Wed, 06 Jan 2021 05:52:29 -0800 (PST) MIME-Version: 1.0 From: Craig Ringer Date: Wed, 6 Jan 2021 21:52:18 +0800 Message-ID: Subject: PoC of helper tool to capture macro and enum values To: systemtap@sourceware.org Content-Type: multipart/mixed; boundary="00000000000057c1a405b83ba295" X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, HTML_MESSAGE, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-Content-Filtered-By: Mailman/MimeDel 2.1.29 X-BeenThere: systemtap@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Systemtap mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 06 Jan 2021 13:52:33 -0000 --00000000000057c1a405b83ba295 Content-Type: text/plain; charset="UTF-8" Hi all Here's a PoC of a tool I scratched together today to extract symbolic values for enums and macros from arbitrary executables into a form that 'stap' can use. I scripted gdb to dump the info and generate a .c file that I then compile and supply to stap as an additional input. But I intend to change it to directly generate a tapset soon; indirection via the .c file is entirely unnecessary, and it's useless for non-kernel runtimes. I'll switch to tapset .stpm generation soon. I'm not super happy with the result. The biggest issue is that gdb's Python API appears to lack a way to set up a scope within which expressions should be evaluated. You can do some limited scoping of symbol lookups, but not macros. You have to actually run the target program and break at relevant locations, which is a hassle that makes the whole thing less useful. It can also only dump macros if the target executable was built with -ggdb3 which is uncommon. Anyway, flawed or not, here's the first draft. Example dumps some symbols from a postgres executable. -- Craig Ringer http://www.2ndQuadrant.com/ 2ndQuadrant - PostgreSQL Solutions for the Enterprise --00000000000057c1a405b83ba295 Content-Type: application/x-shellscript; name="postgres_syms.sh" Content-Disposition: attachment; filename="postgres_syms.sh" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kjlhciuw1 IyEvYmluL2Jhc2gKCmdkYiAtYmF0Y2ggLXggcG9zdGdyZXNfc3ltcy5nZGIgLWV4ICdxdWl0Jwpn Y2MgLVdhbGwgLVdleHRyYSAtZ2dkYiBwb3N0Z3Jlc19zeW1zLmMgLXNoYXJlZCAtbyBwb3N0Z3Jl c19zeW1zLnNvCg== --00000000000057c1a405b83ba295 Content-Type: text/x-python; charset="US-ASCII"; name="stap-enum-gdb.py" Content-Disposition: attachment; filename="stap-enum-gdb.py" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kjlhciv22 IyFweXRob24zCgoiIiIKU3VwcG9ydCBmb3IgZHVtcGluZyBlbnVtcyBhbmQgbWFjcm9zLgoKUnVu IHdpdGhpbiBnZGIsIGUuZy4KCiAgICBzb3VyY2UgInN0YXAtaW5pdC1nZGIucHkiCiAgICBweSBk dW1wZXIgPSBUeXBlRHVtcGVyKG9wZW4oImRlbW8uYyIsInciKSkKICAgIGZpbGUgL3BhdGgvdG8v cG9zdGdyZXMKICAgIGJyZWFrIG1haW4KICAgIHJ1bgogICAgcHkgZHVtcGVyLndyaXRlX2hlYWRl cigpCiAgICBweSBkdW1wZXIuZHVtcF9tYWNybygiUEdfVkVSU0lPTl9OVU0iKQogICAgcHkgZHVt cGVyLmR1bXBfZW51bSgiZW51bSBXYWxMZXZlbCIpCgpFeHBlY3RzIHRvIGJlIHRvbGQgd2hpY2gg bWFjcm9zIGFuZCBlbnVtIHN5bXMgdG8gZHVtcC4gRG9lc24ndCBzZWVtIHRvIGJlIGEgd2F5CnRv IGFzayBnZGIgdG8gZW51bWVyYXRlIGFsbCBrbm93biBtYWNyb3MgYW5kIHR5cGVzIHVuZm9ydHVu YXRlbHksIG5vdCB3aXRob3V0CnBhcnNpbmcgJ2luZm8gbWFjcm9zJyBhbmQgJ2luZm8gdHlwZXMn IG91dHB1dC4gU2lnaC4gTm8gZmlsdGVyIGZvciBvYmpmaWxlIGV0Yy4KCkltcG9ydGFudCBsaW1p dGF0aW9ucyB0aGF0IGFyZW4ndCBlYXNpbHkgZml4ZWQ6CgoqIFRoaXMgdG9vbCBjYW4gb25seSBk dW1wIG1hY3JvcyBhbmQgc3RhdGljIHN5bWJvbHMgd2hlbiB0aGUgY3VycmVudCBzY29wZSBnZGIK ICBpbnZva2VzIHRoZW0gaW4gbWFrZXMgdGhlbSB2aXNpYmxlLiBUaGUgUHl0aG9uIEFQSSBkb2Vz bid0IHNlZW0gdG8gZ2l2ZQogIGVub3VnaCBhY2Nlc3MgdG8gZ2RiIGlubmFyZHMgdG8gc2VsZWN0 IGFuIGFjdGl2ZSBzY29wZSAvIGJsb2NrIC8gb2JqZmlsZQogIHRvIHNlYXJjaCBmb3IgbWFjcm8g aW5mbywgYW5kIHlvdSBjYW4ndCB1c2UgZ2RiLmxvb2t1cF9zeW1ib2woKSBmb3IgbWFjcm9zLgog IFNvIGl0J3MgdXAgdG8gdGhlIHNjcmlwdCB0byBlbnN1cmUgdGhlIGN1cnJlbnQgZnJhbWUgaXMg aW4gdGhlIHRhcmdldAogIGNvbXBpbGF0aW9uIHVuaXQgb3Igc2NvcGUuIEZvciBlbnVtIHZhbHVl IHN5bWJvbHMgKGJ1dCBub3QgdHlwZW5hbWVzKQogIGxvb2t1cF9zeW1ib2woKSBjYW4gYmUgdXNl ZCBvbiB0aGUgT2JqZmlsZSB0YXJnZXQuCgpbVE9ET11zCgoqIERvZXNuJ3QgcmVtYXAgZW51bSB2 YWx1ZXMgYW5kIGVtaXQgdGhlIGVudW0gdHlwZSBpbnN0ZWFkIHlldAoqIERvZXNuJ3QgbG9hZCBh IHR5cGVsaXN0IGZpbGUgeWV0LCBtdXN0IGRvIHlvdXIgb3duIFB5dGhvbiBjYWxscwoqIERvZXNu J3QgYXV0by1wcmVmaXggImVudW0iIG9uIGJhcmUgZW51bSB0eXBlbmFtZXMsIHlvdSBoYXZlIHRv IHF1YWxpZnkgdGhlbQoqIERvZXNuJ3Qgc2VlbSB0byBmb2xsb3cgdHlwZGVmcyBmb3IgZW51bXMg cHJvcGVybHkKKiBSZXNvbHZlIGVudW1zIHVzaW5nIHRoZSBuYW1lIG9mIGFuIGVudW0tdmFsdWUg bm90IGp1c3QgdGhlIGVudW0gdHlwZSwgYW5kCiAgd2FsayBhbGwgb2JqZmlsZXMgdG8gbG9vayBp dCB1cCwgb3IgYWxsb3cgb25lIG9iamZpbGUgdG8gYmUgc3BlY2lmaWVkLgoKCgpTZWUgcmVmZXJl bmNlczoKCiogaHR0cHM6Ly9zb3VyY2V3YXJlLm9yZy9nZGIvb25saW5lZG9jcy9nZGIvUHl0aG9u LUFQSS5odG1sCgoKCgoiIiIKCmltcG9ydCBnZGIKaW1wb3J0IHN5cwppbXBvcnQgcmUKaW1wb3J0 IHRleHR3cmFwCgp2YWxpZF9pZGVudGlmaWVyX3JlZ2V4cCA9IHJlLmNvbXBpbGUoIl5bYS16QS1a MC05X10qJCIpCm1hY3JvX2RlZmluZV9yZWdleHAgPSByZS5jb21waWxlKCIuKl4jZGVmaW5lIiwg cmUuTVVMVElMSU5FfHJlLkRPVEFMTCkKCmNsYXNzIFR5cGVEdW1wZXI6CgogICAgZGVmIF9faW5p dF9fKHNlbGYsIG91dGZpbGUpOgogICAgICAgIHNlbGYub3V0X3N0cmVhbSA9IG91dGZpbGUKCiAg ICBkZWYgd3JpdGUoc2VsZiwgb3V0KToKICAgICAgICAiIiJBbGxvdyBkaXJlY3Qgc3RyZWFtIHdy aXRlcyBmb3IgcHJlZml4IGV0YyIiIgogICAgICAgIHNlbGYub3V0X3N0cmVhbS53cml0ZShvdXQp CgogICAgZGVmIHdyaXRlX2hlYWRlcihzZWxmKToKICAgICAgICBmbiA9IGdkYi5zZWxlY3RlZF9p bmZlcmlvcigpLnByb2dzcGFjZS5maWxlbmFtZQogICAgICAgIG1haW5fb2JqZmlsZSA9IFt4IGZv ciB4IGluIGdkYi5zZWxlY3RlZF9pbmZlcmlvcigpLnByb2dzcGFjZS5vYmpmaWxlcygpIGlmIHgu ZmlsZW5hbWUgPT0gZ2RiLnNlbGVjdGVkX2luZmVyaW9yKCkucHJvZ3NwYWNlLmZpbGVuYW1lXQog ICAgICAgIGJ1aWxkX2lkID0gTm9uZQogICAgICAgIGlmIG1haW5fb2JqZmlsZToKICAgICAgICAg ICAgYnVpbGRfaWQgPSBtYWluX29iamZpbGVbMF0uYnVpbGRfaWQKICAgICAgICBzZWxmLm91dF9z dHJlYW0ud3JpdGUoIi8qXG4gKiBHZW5lcmF0ZWQgYnkgc3RhcC1lbnVtLWdkYi5weVxuICogZnJv bSB7fVxuICogd2l0aCBidWlsZC1pZCB7fVxuICovXG5cbiIuZm9ybWF0KGZuLCBidWlsZF9pZCkp CgogICAgZGVmIGR1bXBfZW51bShzZWxmLCB0eXBlbmFtZSwgdmFsdWVfbmFtZV9wcmVmaXg9IiIp OgogICAgICAgICIiIgogICAgICAgIER1bXAgYW4gZW51bSdzIGZpZWxkcyBhcyBjb25zdCBzeW1i b2xzLgoKICAgICAgICBUT0RPIHRyeSBhZ2FpbiB3aXRoIGVudW0gcHJlZml4IG9uIGZhaWwKICAg ICAgICAiIiIKICAgICAgICBidWYgPSAiIgoKICAgICAgICAjIEdldCBHREIgdG8gZGVzY3JpYmUg dGhlIHR5cGUgYW5kIGZpZWxkcyBpdHMgb3duIHdheSBmb3IgY29tbWVudCB1c2UuCiAgICAgICAg cHR5cGVfb3V0cHV0ID0gZ2RiLmV4ZWN1dGUoInB0eXBlICIgKyB0eXBlbmFtZSwgdG9fc3RyaW5n PVRydWUpCiAgICAgICAgcHR5cGVfb3V0cHV0ID0gcHR5cGVfb3V0cHV0LnN0cmlwKCkKCiAgICAg ICAgZW51bV90eXBlID0gZ2RiLmxvb2t1cF90eXBlKHR5cGVuYW1lKQogICAgICAgIGJhc2VfdHlw ZSA9IGVudW1fdHlwZS50YXJnZXQoKQoKICAgICAgICBidWYgKz0gIi8qXG4gKiB7fVxuICovXG4i LmZvcm1hdChwdHlwZV9vdXRwdXQpCiAgICAgICAgZm9yIChuLCB2KSBpbiBlbnVtX3R5cGUuaXRl bXMoKToKICAgICAgICAgICAgYnVmICs9ICJ7fSB7fXt9ID0ge307IC8qIHt9IHt9ICovXG4iLmZv cm1hdCgKICAgICAgICAgICAgICAgIGJhc2VfdHlwZS5jb25zdCgpLCB2YWx1ZV9uYW1lX3ByZWZp eCwgbiwgdi5lbnVtdmFsLCBlbnVtX3R5cGUubmFtZSwgbikKCiAgICAgICAgc2VsZi5vdXRfc3Ry ZWFtLndyaXRlKGJ1ZikKICAgICAgICBzZWxmLm91dF9zdHJlYW0ud3JpdGUoIlxuIikKCiAgICBk ZWYgZHVtcF9lbnVtX2J5X3ZhbHVlKHNlbGYsIGVudW1uYW1lKToKICAgICAgICAiIiJUT0RPOiBn aXZlbiBhIHZhbHVlIG9mIGFuIGVudW0sIGR1bXAgdGhlIHdob2xlIGVudW0gaWYgbm90IGFscmVh ZHkgZHVtcGVkIiIiCiAgICAgICAgcGFzcwoKICAgIGRlZiBkdW1wX21hY3JvKHNlbGYsIG1hY3Jv bmFtZSk6CiAgICAgICAgIiIiCiAgICAgICAgT3V0cHV0IGEgc3RhdGljIHZhcmlhYmxlIHdpdGgg dGhlIHZhbHVlIG9mIHRoZSBnaXZlbiBtYWNyby4gZ2RiIHB5dGhvbgogICAgICAgIEFQSSBkb2Vz bid0IHNlZW0gdG8gZXhwb3NlIHNlbnNpYmxlIGFjY2VzcyB0byBtYWNyb3MuIFlvdSBjYW4gdXNl ICdpbmZvCiAgICAgICAgbWFjcm8nIGJ1dCBpdCdzIGNsdW1zeS4KICAgICAgICAiIiIKICAgICAg ICBidWYgPSAiIgoKICAgICAgICBpZiBub3QgdmFsaWRfaWRlbnRpZmllcl9yZWdleHAubWF0Y2go bWFjcm9uYW1lKToKICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigie30gaXMgbm90IGEgbGVn YWwgQyBpZGVudGlmaWVyLCByZWZ1c2luZyB0byB0cnkgdG8gZXZhbHVhdGUgYXMgYSBtYWNybyIp CgogICAgICAgICMgVHJ5IHRvIGRvdWJsZSBjaGVjayBpdCdzIHJlYWxseSBhIG1hY3JvCiAgICAg ICAgZXhlY19yZXN1bHQgPSBnZGIuZXhlY3V0ZSgiaW5mbyBtYWNybyB7fSIuZm9ybWF0KG1hY3Jv bmFtZSksIHRvX3N0cmluZz1UcnVlKQogICAgICAgIGlmIG1hY3JvX2RlZmluZV9yZWdleHAubWF0 Y2goZXhlY19yZXN1bHQpOgogICAgICAgICAgICAjIFdyaXRlIGEgY29tbWVudCB3aXRoIGdkYidz IGRlc2NyaXB0aW9uIG9mIHRoZSBtYWNybwogICAgICAgICAgICBidWYgKz0gIi8qXG4iCiAgICAg ICAgICAgIGJ1ZiArPSB0ZXh0d3JhcC5pbmRlbnQoZXhlY19yZXN1bHQuc3RyaXAoKSwgIiAqICIp CiAgICAgICAgICAgIGJ1ZiArPSAiXG4gKi9cbiIKICAgICAgICBlbHNlOgogICAgICAgICAgICAj IFRPRE8gaGFuZGxlIGVudW1zIGFuZCBzdGF0aWMgY29uc3RhbnRzIHRvbwogICAgICAgICAgICBy YWlzZSBWYWx1ZUVycm9yKCJcImluZm8gbWFjcm8ge31cIiBvdXRwdXQgZGlkIG5vdCBhcHBlYXIg dG8gY29udGFpbiBhICNkZWZpbmUsIG1heWJlIHRoaXMgaXNuJ3QgYSBtYWNybz86XG57fVxuXG4i LmZvcm1hdChtYWNyb25hbWUsIGV4ZWNfcmVzdWx0KSkKCiAgICAgICAgbWFjcm92YWx1ZSA9IGdk Yi5wYXJzZV9hbmRfZXZhbChtYWNyb25hbWUpCiAgICAgICAgYmFzZXR5cGUgPSBtYWNyb3ZhbHVl LnR5cGUudW5xdWFsaWZpZWQoKQogICAgICAgIGlmIGJhc2V0eXBlLmNvZGUgPT0gZ2RiLlRZUEVf Q09ERV9BUlJBWToKICAgICAgICAgICAgIyBkb2Vzbid0IGhhbmRsZSBtdWx0aWRpbSBhcnJheXMK ICAgICAgICAgICAgbmVsZW1zID0gYmFzZXR5cGUuY29kZS5zaXplb2YKICAgICAgICAgICAgaWYg YmFzZXR5cGUudGFyZ2V0KCkuY29kZSA9PSBnZGIuVFlQRV9DT0RFX0lOVDoKICAgICAgICAgICAg ICAgICMgbXVzdCBiZSBhIGJldHRlciB3YXkgdG8gaGFuZGxlIHN0cmluZyBjb25zdGFudHM/Pwog ICAgICAgICAgICAgICAgaWYgYmFzZXR5cGUuc3RhcnRzd2l0aCgiY2hhciIpIG9yIGJhc2V0eXBl LnN0YXJ0c3dpdGgoInVuc2lnbmVkIGNoYXIiKSBvciBiYXNldHlwZS5zdGFydHN3aXRoKCJzaWdu ZWQgY2hhciIpOgogICAgICAgICAgICAgICAgICAgIHZhbHVlcmVwciA9IG1hY3JvdmFsdWUuZm9y bWF0X3N0cmluZyhyYXc9VHJ1ZSwgZm9ybWF0PSdzJykKICAgICAgICAgICAgICAgIGVsc2U6CiAg ICAgICAgICAgICAgICAgICAgdmFsdWVyZXByID0gbWFjcm92YWx1ZS5mb3JtYXRfc3RyaW5nKHJh dz1UcnVlLCBmb3JtYXQ9J3gnKQogICAgICAgICAgICAgICAgYnVmICs9ICJ7fSB7fSA9IHt9O1xu Ii5mb3JtYXQoYmFzZXR5cGUudGFyZ2V0KCkuY29uc3QoKS5hcnJheShuZWxlbXMpLCBtYWNyb25h bWUsIHZhbHVlcmVwcikKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHJhaXNlIFR5 cGVFcnJvcigiZG9uJ3Qga25vdyBob3cgdG8gaGFuZGxlIGFycmF5cyBvZiBub24taW50ZWdlciB0 eXBlcyIpOwoKICAgICAgICBlbHNlOgogICAgICAgICAgICB3aGlsZSBiYXNldHlwZS5jb2RlID09 IGdkYi5UWVBFX0NPREVfRU5VTSBvciBiYXNldHlwZS5jb2RlID09IGdkYi5UWVBFX0NPREVfVFlQ RURFRjoKICAgICAgICAgICAgICAgIGJhc2V0eXBlID0gYmFzZXR5cGUudGFyZ2V0KCkKICAgICAg ICAgICAgaWYgYmFzZXR5cGUuY29kZSA9PSBnZGIuVFlQRV9DT0RFX0lOVCBvciBiYXNldHlwZS5j b2RlID09IGdkYi5UWVBFX0NPREVfRkxUOgogICAgICAgICAgICAgICAgdmFsdWVyZXByID0gbWFj cm92YWx1ZS5jYXN0KGJhc2V0eXBlKS5mb3JtYXRfc3RyaW5nKHJhdz1UcnVlKQogICAgICAgICAg ICAgICAgYnVmICs9ICJ7fSB7fSA9IHt9O1xuIi5mb3JtYXQoYmFzZXR5cGUuY29uc3QoKSwgbWFj cm9uYW1lLCB2YWx1ZXJlcHIpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICByYWlz ZSBUeXBlRXJyb3IoImV4cHJlc3Npb24gYmFzZXR5cGUge30gZGlkbid0IHJlc29sdmUgdG8gaW50 ZWdlciBvciBmbG9hdCIpCgogICAgICAgIHNlbGYub3V0X3N0cmVhbS53cml0ZShidWYpCiAgICAg ICAgc2VsZi5vdXRfc3RyZWFtLndyaXRlKCJcbiIpCgoKZHVtcGVyID0gVHlwZUR1bXBlcihzeXMu c3RkZXJyKQo= --00000000000057c1a405b83ba295 Content-Type: application/octet-stream; name="postgres_syms.gdb" Content-Disposition: attachment; filename="postgres_syms.gdb" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kjlhciue0 c291cmNlIHN0YXAtZW51bS1nZGIucHkKcHkgZHVtcGVyID0gVHlwZUR1bXBlcihvcGVuKCJwb3N0 Z3Jlc19zeW1zLmMiLCJ3IikpCmZpbGUgfi9wZy8yUVJFTF8xMV9TVEFCTEVfM182L2Jpbi9wb3N0 Z3JlcwpicmVhayBtYWluCnJ1bgpweSBkdW1wZXIud3JpdGVfaGVhZGVyKCkKcHkgZHVtcGVyLmR1 bXBfbWFjcm8oIlBHX1ZFUlNJT05fTlVNIikKcHkgZHVtcGVyLmR1bXBfZW51bSgiZW51bSBXYWxM ZXZlbCIpCgo= --00000000000057c1a405b83ba295--